最近遇到一个地区数据汇总的问题,地区下的地址呈树形结构,(简化结构)如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;

虽然上叙方案能够查询出对的数据,但是其效率太低,如果有优化的方法可以在下面留言或者私聊我。

树形结构数据汇总查询解决方案+优化求助相关推荐

  1. Java递归查询某个节点下所有子节点多级信息(递归部门查询,递归树形结构数据查询)

    前言 在做项目中我们会遇到树形结构数据,如果我们想要查询某个几点下面所有子节点(多级)数据,此时我们又不知道下面有多少级节点以及节点ID,那么我们就需要使用递归去查询了,当然在数据库中写函数也是可以实 ...

  2. Java 后端实现全国省市区树形结构数据查询

    使用到的sql文件自取 链接:https://pan.baidu.com/s/1YmpGH6UXCgie-T6xUrIwxQ 提取码:regn entity import lombok.Data;im ...

  3. 分库分表下分页查询解决方案

    分库分表下分页查询解决方案 不管是随着业务量的增大.还是随着用户数量的增长,在单一表中无法承受大量大数据,导致查询速度极慢甚至拖垮数据库.所以分库分表的策略随之应用,但是如何在分库分表的情况下,进行分 ...

  4. sql优化常用的几种方法_MySQL常用30种SQL查询语句优化方法

    作者:小小程序员 链接:https://zhuanlan.zhihu.com/p/64731487 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1.应尽量避免在 ...

  5. 构建树形结构数据(全部构建,查找构建)C#版

    摘要: 最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件. 一.遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度 ...

  6. SQL 性能优化梳理 —— 基本概念、创建时优化、查询时优化

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:rrd.me/fVJw6 前言 本文主要针对的是关 ...

  7. Mysql常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

  8. MySQL 常用30种SQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及 ...

  9. 常用30种MySQL查询语句优化方法

    1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉 ...

最新文章

  1. R语言使用vcd包的spine函数可视化spinogram图(spinogram图是被归一化的堆叠条形图、这样每个条形的高度一样、内部显示不同分布的比例)
  2. matlab 函数 向量参数,Scipy integrate(quad,quadration,nquad)不能集成向量参数化函数?等效函数(MATLAB works)...
  3. 瑞星:ATM出现漏洞 银行:哪有这回事?
  4. tensorflow实现宝可梦数据集迁移学习
  5. oracle入门(8)——实战:支持可变长参数、多种条件、多个参数排序、分页的存储过程查询组件...
  6. Java方法中的参数太多,第7部分:可变状态
  7. 记录搭建Odoo框架
  8. CCIE考试现在需要面试了
  9. php 获取 url 的操作 非常有用!
  10. AD16从两层切到显示一层的视图shift+s
  11. POJ 1094 Sorting It All Out 【拓扑排序】
  12. 个人设计web前端大作业 基于html5制作美食菜谱网页设计作业代码
  13. Structure-Grounded Pretraining for Text-to-SQL 论文解读
  14. ✨✨✨【C语言】带你用最短的时间刷题(附解题思路、具体代码)不断更新(二)✨✨✨
  15. 自动开机和自动关机设定方法(包括linux和windows)
  16. 根据先序遍历建立一个二叉树
  17. 16个时髦的扁平化设计的 HTML5 CSS3 网站模板
  18. 中国古代经典(汉英双语对照)
  19. nginx的配置文件详解
  20. 面朝大海,爱上春暖花开

热门文章

  1. Lab01:Xv6 and Unix utilities
  2. 获取系统时间出错oracle-,oracle 获取系统时间(转)
  3. 三相滤波器怎么接线_单相电机和三相电机怎么接线?为什么三相电机有3或6个接线柱?...
  4. html5手机签名,html5手写签名
  5. 安卓9.0官方系统升级包_华为、荣耀公布可升级安卓10.0机型,你的手机在名单之内吗?...
  6. VS2017 调用Tesseract
  7. [SQLite]使用记录
  8. gdb命令中attach使用
  9. 使用Java高速实现进度条
  10. Apache的RewriteRule规则详细介绍