`
xo_tobacoo
  • 浏览: 391962 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

表数据的树结构

阅读更多

今天发现公司的一个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 bygroup 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表示的数目超出了分组的范围时返回的值。

 

1
0
分享到:
评论

相关推荐

    java版数据结构-树结构

    java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;java版数据结构-树结构;

    单表树结构

    在IT行业中,单表树结构是一种常见的数据组织方式,尤其在资源管理器或者数据库设计中广泛应用。这个结构能够有效地模拟现实世界中的层级关系,比如组织架构、地理区域划分或者文件目录等。在这个场景中,"地区树...

    java复制树结构数据方法

    自己写的一个 用java代码复制树形结构数据的方法 很实用 希望对有需求的朋友给予帮助

    全国最新省市区表,树形结构及数据 areas.sql

    最新全国省市区行政划分表,树形结构,全国统一(城市编码、区域编码、邮政编码),及各市区行政坐标(经纬度),方便初始化地图中心及标注点,等级划分三级联动效果

    树结构实现页面的显示

    在IT行业中,尤其是在嵌入式系统和用户界面设计领域,树结构是一种常用的数据组织方式,它在实现页面显示时有着显著的优势。本文将详细探讨如何利用树结构来优化页面显示,以及与STM32微控制器、文件系统(如FATS)...

    数据结构 树、二叉树的数据结构 哈夫曼树

    1. 定义并实现二叉树的数据结构(注:其中创建二叉树要求使用广义表或前序遍历方法创建、还要求一个是前序+中序的方法创建)。测试二叉树使用如下的树: A B C D E F 2. 实现哈夫曼树数据结构,使用...

    数据结构之树

    C#树 数据结构 数据结构之树 PPT

    java构造多级树结构,支持多根节点

    在Java编程中,构建多级树结构是一种常见的需求,特别是在数据组织、文件系统或图形用户界面设计中。这里我们讨论如何在Java中实现一个支持多根节点的树结构,并使用ZTree(一种流行的JavaScript库)进行展示。首先...

    关系数据库表存储树形结构的方法

    在单数据库表实现中,整个树形结构的数据存储在一个数据库表中。每个记录都会包含一个额外的指针字段,这个字段用来存放父节点的编号。根节点的指针字段为空,表示没有父节点。这种实现方式的关键在于如何设计表结构...

    jpa单表递归树形结构实现

    // 自定义查询获取整个树结构,例如: Optional<Node> findRootNode(); } ``` 实现递归查询通常需要使用递归算法,但SQL不直接支持。我们可以使用存储过程或者在Java代码中处理。例如,可以使用`...

    mysql数据表导出生成xml文件和树形结构

    然后,利用这个树结构,我们可以开发一个用户界面,展示数据表的树形视图。用户可以通过点击节点来加载或隐藏子节点,从而实现交互式浏览。 总之,MySQL数据表导出到XML文件是一个涉及数据库连接、数据查询、XML...

    数据结构 树和二叉树ppt教程

    这些性质在分析和操作树结构时具有指导意义。 二叉树是树的一个特例,每个节点最多有两个子节点,分为左子节点和右子节点。在提供的代码中,定义了一个二叉树节点结构体`BiTNode`,包含数据域和指向左右子节点的...

    数据结构课程设计(树)

    数据结构课程设计中,主题是关于树的实现,特别是孩子链表示法,这是一种在树结构中存储节点子节点的方式。在这种表示法中,每个节点包含一个数据域和一个指向其子节点的指针数组。在这个特定的设计中,我们看到一个...

    mysql 树形结构查询

    在 findLChild 存储过程中,我们首先创建了一个临时表 tmp_table,以便于存储树形结构的数据。然后,我们设置了递归深度为 99,以便于控制查询的深度。接着,我们调用了 iterative 存储过程以实现树形结构的查询。...

    两个表 关于树的组合

    首先,父表通常存储树结构中的顶层节点或父节点,而子表则包含所有子节点。在描述中提到的查询需求,是关于如何从这两个表中检索出一个完整的树状结构。这通常需要执行两种类型的查询:一种是从父表出发,查找所有子...

    mysql-省市县-表结构+表数据

    mysql-省市县-表结构+表数据,用mysql sql语句写的省市区信息代码,可以直接运行用哦

    数据结构课程设计链表、树和图JAVA代码

    实现树结构需要关注插入、删除、查找等操作,并保持树的特性,如平衡二叉树的平衡性。 3. **图** 图是由顶点和边组成的非线性数据结构,用于表示对象之间的关系。图可以是有向的,即边具有方向;也可以是无向的。...

    oracle 基于 树结构查询

    1. 快速检索树型结构数据:树结构查询可以快速地检索树型结构数据,无需遍历整个表。 2. 减少查询时间:树结构查询可以减少查询时间,因为它只需要遍历树型结构数据,而不是整个表。 3. 提高查询效率:树结构查询...

    C++的数据结构 树 的源代码

    2. **sequential_tree.h** - 这个头文件可能定义了一个按照顺序访问节点的树结构。顺序树可能是指按照某种顺序(如深度优先或广度优先)排列节点的树,或者它可能是一种特殊的树实现,允许线性化访问其元素。 3. **...

    工作职位分类json数据(树结构)

    工作职位分类树结构 字段:id,title,pid,children 例[{"id":1001,"title":"销售","pid":null,"children":[{"id":10010001,"title":"销售代表","pid":1001,"children":null},{"id":10010002,"title":"销售助理",……

Global site tag (gtag.js) - Google Analytics