绍兴网站开发,百度seo网站排名优化,销售网站快速建立,如何做自己网站云播最近遇到一个地区数据汇总的问题#xff0c;地区下的地址呈树形结构#xff0c;#xff08;简化结构#xff09;如A市下有B、C区#xff0c;B区下有D、E街道。先要查询所有地区的人数#xff08;包括子区域#xff09;#xff0c;如A的人数直属A的人数B的人数C的人数D的…最近遇到一个地区数据汇总的问题地区下的地址呈树形结构简化结构如A市下有B、C区B区下有D、E街道。先要查询所有地区的人数包括子区域如A的人数直属A的人数B的人数C的人数D的人数E的人数。C的人数直属C的人数。
地址结构如图 地区直属人数如下 查询结果如下 实现如下
WITH a AS(
SELECT A 地址, 10 总人数, 8 正常人数, 2 欠费人数 FROM dual
UNION ALL
SELECT B, 20, 15, 5 FROM dual
UNION ALL
SELECT C, 30, 29, 1 FROM dual
UNION ALL
SELECT D, 40, 20, 20 FROM dual
UNION ALL
SELECT E, 50, 32, 18 FROM dual
),
b AS(
SELECT B 地址, A 上级地址 FROM dual
UNION ALL
SELECT C, A FROM dual
UNION ALL
SELECT D, B FROM dual
UNION ALL
SELECT E, B FROM dual
UNION ALL
SELECT A, NULL FROM dual
),
c AS(
SELECT A 地址 FROM dual
UNION ALL
SELECT B FROM dual
UNION ALL
SELECT C FROM dual
UNION ALL
SELECT D FROM dual
UNION ALL
SELECT E FROM dual
)
SELECT c.地址,(SELECT sum(a.总人数) FROM a WHERE a.地址 IN (SELECT b.地址 FROM b START WITH b.地址 c.地址 CONNECT BY prior b.地址 b.上级地址)) 总人数,(SELECT sum(a.正常人数) FROM a WHERE a.地址 IN (SELECT b.地址 FROM b START WITH b.地址 c.地址 CONNECT BY prior b.地址 b.上级地址)) 正常人数,(SELECT sum(a.欠费人数) FROM a WHERE a.地址 IN (SELECT b.地址 FROM b START WITH b.地址 c.地址 CONNECT BY prior b.地址 b.上级地址)) 欠费人数
FROM c;
虽然上叙方案能够查询出对的数据但是其效率太低如果有优化的方法可以在下面留言或者私聊我。