今天发现公司的一个table的数据是个树结构,公司-子公司-子子公司-子子子公司...如果我要按树返回结果咋办?
搜到如下SQL,并整理如下知识点:
SELECT nd, SUM (js) sum_js,
MAX (LTRIM (SYS_CONNECT_BY_PATH (jm, ','), ',')) sum_jm
FROM (SELECT nd, js, jm,
ROW_NUMBER () OVER (PARTITION BY nd ORDER BY js) rn
FROM tmp10)
START WITH rn = 1
CONNECT BY PRIOR rn + 1 = rn AND PRIOR nd = nd
GROUP BY nd;
1) over partition by与group by 的区别 :over 是分析函数,group是分组
SELECT deptno, ename, sal,
SUM (sal) OVER (PARTITION BY deptno ORDER BY ename) 部门连续求和,
--各部门的薪水"连续"求和
SUM (sal) OVER (PARTITION BY deptno) 部门总和,
-- 部门统计的总和,同一部门总和不变
100
* ROUND (sal / SUM (sal) OVER (PARTITION BY deptno), 4) "部门份额(%)",
SUM (sal) OVER (ORDER BY deptno, ename) 连续求和,
--所有部门的薪水"连续"求和
SUM (sal) OVER ()
总和,
-- 此处sum(sal) over () 等同于sum(sal),所有员工的薪水总和
100 * ROUND (sal / SUM (sal) OVER (), 4) "总份额(%)"
FROM emp
2) START
WITH rn =
1 如果某行的rn=1那么开始
CONNECT BY PRIOR
rn + 1
=
rn 上一行数据 rn +加1的值等于这一行的rn值
3)自从Since Oracle 9i 开始,就可以通过 SYS_CONNECT_BY_PATH 函数实现将从父节点到当前行内容以“path”或者层次元素列表的形式显示出来。
有的时候用户更关心的是每个层次分支中等级最低的内容。那么你就可以利用伪列函数CONNECT_BY_ISLEAF来判断当前行是不是叶子。如 果是叶子就会在伪列中显示“1”,如果不是叶子而是一个分支(例如当前内容是其他行的父亲)就显示“0”。
select connect_by_isleaf,sys_connect_by_path(company_code,',')
from fin_company_group_detail
start with parent_company_code='I0003'
connect by parent_company_code=prior company_code
4) 为了方便我们建立一个树,有时候我们还会添加rownum
select no,sys_connect_by_path(q,',')
from (
select no,q,
no+row_number() over( order by no) rn,
row_number() over(partition by no order by no) rn1
from test
)
start with rn1=1
connect by rn-1=prior rn
ow_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。
分享到:
相关推荐
java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;
在IT行业中,单表树结构是一种常见的数据组织方式,尤其在资源管理器或者数据库设计中广泛应用。这个结构能够有效地模拟现实世界中的层级关系,比如组织架构、地理区域划分或者文件目录等。在这个场景中,"地区树...
自己写的一个 用java代码复制树形结构数据的方法 很实用 希望对有需求的朋友给予帮助
最新全国省市区行政划分表,树形结构,全国统一(城市编码、区域编码、邮政编码),及各市区行政坐标(经纬度),方便初始化地图中心及标注点,等级划分三级联动效果
在IT行业中,尤其是在嵌入式系统和用户界面设计领域,树结构是一种常用的数据组织方式,它在实现页面显示时有着显著的优势。本文将详细探讨如何利用树结构来优化页面显示,以及与STM32微控制器、文件系统(如FATS)...
1. 定义并实现二叉树的数据结构(注:其中创建二叉树要求使用广义表或前序遍历方法创建、还要求一个是前序+中序的方法创建)。测试二叉树使用如下的树: A B C D E F 2. 实现哈夫曼树数据结构,使用...
C#树 数据结构 数据结构之树 PPT
在Java编程中,构建多级树结构是一种常见的需求,特别是在数据组织、文件系统或图形用户界面设计中。这里我们讨论如何在Java中实现一个支持多根节点的树结构,并使用ZTree(一种流行的JavaScript库)进行展示。首先...
在单数据库表实现中,整个树形结构的数据存储在一个数据库表中。每个记录都会包含一个额外的指针字段,这个字段用来存放父节点的编号。根节点的指针字段为空,表示没有父节点。这种实现方式的关键在于如何设计表结构...
// 自定义查询获取整个树结构,例如: Optional<Node> findRootNode(); } ``` 实现递归查询通常需要使用递归算法,但SQL不直接支持。我们可以使用存储过程或者在Java代码中处理。例如,可以使用`...
然后,利用这个树结构,我们可以开发一个用户界面,展示数据表的树形视图。用户可以通过点击节点来加载或隐藏子节点,从而实现交互式浏览。 总之,MySQL数据表导出到XML文件是一个涉及数据库连接、数据查询、XML...
这些性质在分析和操作树结构时具有指导意义。 二叉树是树的一个特例,每个节点最多有两个子节点,分为左子节点和右子节点。在提供的代码中,定义了一个二叉树节点结构体`BiTNode`,包含数据域和指向左右子节点的...
数据结构课程设计中,主题是关于树的实现,特别是孩子链表示法,这是一种在树结构中存储节点子节点的方式。在这种表示法中,每个节点包含一个数据域和一个指向其子节点的指针数组。在这个特定的设计中,我们看到一个...
在 findLChild 存储过程中,我们首先创建了一个临时表 tmp_table,以便于存储树形结构的数据。然后,我们设置了递归深度为 99,以便于控制查询的深度。接着,我们调用了 iterative 存储过程以实现树形结构的查询。...
首先,父表通常存储树结构中的顶层节点或父节点,而子表则包含所有子节点。在描述中提到的查询需求,是关于如何从这两个表中检索出一个完整的树状结构。这通常需要执行两种类型的查询:一种是从父表出发,查找所有子...
mysql-省市县-表结构+表数据,用mysql sql语句写的省市区信息代码,可以直接运行用哦
实现树结构需要关注插入、删除、查找等操作,并保持树的特性,如平衡二叉树的平衡性。 3. **图** 图是由顶点和边组成的非线性数据结构,用于表示对象之间的关系。图可以是有向的,即边具有方向;也可以是无向的。...
1. 快速检索树型结构数据:树结构查询可以快速地检索树型结构数据,无需遍历整个表。 2. 减少查询时间:树结构查询可以减少查询时间,因为它只需要遍历树型结构数据,而不是整个表。 3. 提高查询效率:树结构查询...
2. **sequential_tree.h** - 这个头文件可能定义了一个按照顺序访问节点的树结构。顺序树可能是指按照某种顺序(如深度优先或广度优先)排列节点的树,或者它可能是一种特殊的树实现,允许线性化访问其元素。 3. **...
工作职位分类树结构 字段:id,title,pid,children 例[{"id":1001,"title":"销售","pid":null,"children":[{"id":10010001,"title":"销售代表","pid":1001,"children":null},{"id":10010002,"title":"销售助理",……