如何用Oracle實現(xiàn)組織結構中的匯總統(tǒng)計
對于一般的數(shù)據(jù)模型來說,一般是有一個事實表,若干個維度表,通過事實表與維度表的連接,實現(xiàn)不同層次的查詢匯總。
問題是對于組織結構而言,一般所有的數(shù)據(jù)都存貯于一個表中,而且,組織結構的層次也是動態(tài)的。那么,在這種情況下,如何實現(xiàn)員工工資的匯總呢?一個比較有趣的問題是: 如何統(tǒng)計員工及其所有被管理員工的總工資,舉個例子,CEO的總工資就是整個公司總有員工的總工資之和,包括他自己。
Oracle 引入了一個擴展的運算符,專門用來處理此種情形,它就是connect_by_root。當以connect_by_root修飾一個列名時,Oracle將返回根節(jié)點對應的此列的值。例如,當start with 為 last_name = ‘King’時,這時返回的所有行的connect_by_root last_name的值都將為’King’。這時,對所有行的累計就是對’King’的數(shù)據(jù)的累計了。當不指定start with 子句時,Oracle將對每個節(jié)點依次進行遍歷,于是,我們可以對返回的結果對last_name進行一次group by,那么我們就得到了所有l(wèi)ast_name對應的匯總工資了。
下面是Oracle 文檔中的例子。
above that employee in the hierarchy, the number of levels between manager and employee, and the path between the two: |
|
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:
|
【編輯推薦】