自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何用Oracle實(shí)現(xiàn)組織結(jié)構(gòu)中的匯總統(tǒng)計(jì)

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維 數(shù)據(jù)庫(kù)
匯總統(tǒng)計(jì)是數(shù)據(jù)處理中常見(jiàn)的一個(gè)操作,如何在Oracle中實(shí)現(xiàn)這一常見(jiàn)操作,本文將給大家提供一種切實(shí)可行的方法。

對(duì)于一般的數(shù)據(jù)模型來(lái)說(shuō),一般是有一個(gè)事實(shí)表,若干個(gè)維度表,通過(guò)事實(shí)表與維度表的連接,實(shí)現(xiàn)不同層次的查詢(xún)匯總。

問(wèn)題是對(duì)于組織結(jié)構(gòu)而言,一般所有的數(shù)據(jù)都存貯于一個(gè)表中,而且,組織結(jié)構(gòu)的層次也是動(dòng)態(tài)的。那么,在這種情況下,如何實(shí)現(xiàn)員工工資的匯總呢?一個(gè)比較有趣的問(wèn)題是: 如何統(tǒng)計(jì)員工及其所有被管理員工的總工資,舉個(gè)例子,CEO的總工資就是整個(gè)公司總有員工的總工資之和,包括他自己。

Oracle 引入了一個(gè)擴(kuò)展的運(yùn)算符,專(zhuān)門(mén)用來(lái)處理此種情形,它就是connect_by_root。當(dāng)以connect_by_root修飾一個(gè)列名時(shí),Oracle將返回根節(jié)點(diǎn)對(duì)應(yīng)的此列的值。例如,當(dāng)start with 為 last_name = ‘King’時(shí),這時(shí)返回的所有行的connect_by_root last_name的值都將為’King’。這時(shí),對(duì)所有行的累計(jì)就是對(duì)’King’的數(shù)據(jù)的累計(jì)了。當(dāng)不指定start with 子句時(shí),Oracle將對(duì)每個(gè)節(jié)點(diǎn)依次進(jìn)行遍歷,于是,我們可以對(duì)返回的結(jié)果對(duì)last_name進(jìn)行一次group by,那么我們就得到了所有l(wèi)ast_name對(duì)應(yīng)的匯總工資了。

下面是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應(yīng)用開(kāi)發(fā)中的幾個(gè)經(jīng)典問(wèn)題
  2. Oracle數(shù)據(jù)空間的使用、監(jiān)控和維護(hù)
  3. Oracle數(shù)據(jù)庫(kù)管理腳本淺析
責(zé)任編輯:彭凡 來(lái)源: OS Oracle
相關(guān)推薦

2011-08-30 17:33:10

OracleSAS宏

2021-08-08 22:08:41

Redis開(kāi)發(fā)網(wǎng)頁(yè)

2011-03-02 15:35:15

Oracle分組統(tǒng)計(jì)

2011-07-13 14:02:42

OracleExcel

2023-12-05 07:26:21

Golang項(xiàng)目結(jié)構(gòu)

2010-04-15 13:10:09

Oracle系統(tǒng)結(jié)構(gòu)

2010-04-20 14:06:56

Oracle SQL語(yǔ)

2011-07-22 13:22:10

Java.NETDataTable

2010-05-10 14:16:50

Oracle樹(shù)結(jié)構(gòu)

2009-03-26 09:24:36

Oracle外鍵數(shù)據(jù)庫(kù)

2011-03-15 09:10:47

iptablesNAT

2011-07-05 08:56:43

JavaScript

2025-02-04 09:58:08

2019-08-01 15:08:37

PythonLine操作系統(tǒng)

2011-03-15 14:26:23

iptablesNAT

2011-07-18 14:00:29

RailsOracle

2022-12-05 16:38:48

Python統(tǒng)計(jì)信息預(yù)測(cè)模型

2011-10-13 09:44:49

MySQL

2011-06-22 16:52:07

Oracle云計(jì)算

2011-05-30 10:36:49

MySQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)