如何用Oracle实现组织结构中的汇总统计
创始人
2024-03-24 03:21:33
0

对于一般的数据模型来说,一般是有一个事实表,若干个维度表,通过事实表与维度表的连接,实现不同层次的查询汇总。

问题是对于组织结构而言,一般所有的数据都存贮于一个表中,而且,组织结构的层次也是动态的。那么,在这种情况下,如何实现员工工资的汇总呢?一个比较有趣的问题是: 如何统计员工及其所有被管理员工的总工资,举个例子,CEO的总工资就是整个公司总有员工的总工资之和,包括他自己。

Oracle 引入了一个扩展的运算符,专门用来处理此种情形,它就是connect_by_root。当以connect_by_root修饰一个列名时,Oracle将返回根节点对应的此列的值。例如,当start with 为 last_name = ‘King’时,这时返回的所有行的connect_by_root last_name的值都将为’King’。这时,对所有行的累计就是对’King’的数据的累计了。当不指定start with 子句时,Oracle将对每个节点依次进行遍历,于是,我们可以对返回的结果对last_name进行一次group by,那么我们就得到了所有last_name对应的汇总工资了。

下面是Oracle 文档中的例子。


The following example returns the last name of each employee in department 110, each manager
above that employee in the hierarchy, the number of levels between manager and employee, 
and the path between the two: 

SELECT last_name "Employee", CONNECT_BY_ROOT last_name "Manager",
   LEVEL-1 "Pathlen", SYS_CONNECT_BY_PATH(last_name, '/') "Path"
   FROM employees
   WHERE LEVEL > 1 and department_id = 110
   CONNECT BY PRIOR employee_id = manager_id
   ORDER BY "Employee", "Manager", "Pathlen", "Path";

Employee        Manager            Pathlen Path
--------------- --------------- ---------- ------------------------------
Gietz           Higgins                  1 /Higgins/Gietz
Gietz           King                     3 /King/Kochhar/Higgins/Gietz
Gietz           Kochhar                  2 /Kochhar/Higgins/Gietz
Higgins         King                     2 /King/Kochhar/Higgins
Higgins         Kochhar                  1 /Kochhar/HigginsThe following example uses a GROUP BY clause to return the total salary of each employee in department 110 and all employees below that employee in the hierarchy:

SELECT name, SUM(salary) "Total_Salary" FROM (
   SELECT CONNECT_BY_ROOT last_name as name, Salary
      FROM employees
      WHERE department_id = 110
      CONNECT BY PRIOR employee_id = manager_id)
      GROUP BY name
   ORDER BY name, "Total_Salary";

NAME                      Total_Salary
------------------------- ------------
Gietz                             8300
Higgins                          20300
King                             20300
Kochhar                          20300

【编辑推荐】

  1. Oracle应用开发中的几个经典问题
  2. Oracle数据空间的使用、监控和维护
  3. Oracle数据库管理脚本浅析

相关内容

热门资讯

施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...
VMware vFabric (2012年5月17日中国北京)——全球虚拟化和云基础架构厂商VMware公司(NYSE:VMW)今...
由浅入深学习CentOS入门 在系统的学习CentOS入门的知识中,我们掌握了一些基本的设置。今天我们来讲一下CentOS入门中的...
虚拟现实 人工智能和人体未来会... 探讨像虚拟现实和人工智能这样的技术将会跟人体发生怎样的融合。未来将会出现模糊虚拟现实和现实本身界限的...