oracle 分析函數(shù)

學(xué)習(xí)步驟:

1. 擁有Oracle EBS demo 環(huán)境 或者 PROD 環(huán)境

2. copy以下代碼進(jìn) PL/SQL

3. 配合解釋分析結(jié)果

4. 如果網(wǎng)頁有點(diǎn)亂請(qǐng)復(fù)制到TXT中查看

/*假設(shè)一個(gè)經(jīng)理代表了一個(gè)部門

*/

SELECT emp.full_name,

emp.salary,

emp.manager_id,

row_number() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) row_number_dept, --部門排行

rownum row_number, --行號(hào)

round((rownum + 1) / 4) page_number, --每4行一頁

ntile(2) over(ORDER BY emp.salary DESC) page_number_nt, --平均分成兩類

AVG(emp.salary) over(PARTITION BY emp.manager_id) avg_salary_department, --該部門薪水均值

SUM(emp.salary) over(PARTITION BY emp.manager_id) sum_salary_department, --該部門薪水總額

COUNT(emp.salary) over(PARTITION BY emp.manager_id) count_emp_department, --部門所有的員工

dense_rank() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) rank_salary_dept, --該人員的部門薪水排行

dense_rank() over(ORDER BY emp.salary DESC) rank_salary_company, --該人員的全公司排行

MIN(emp.salary) over(PARTITION BY emp.manager_id) min_salary_dept, --部門的最低薪水

MIN(emp.salary) keep(dense_rank FIRST ORDER BY emp.salary) over(PARTITION BY emp.manager_id) min_salary_dept_first, --部門的最低薪水

first_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) min_salary_dept_firstv, --部門的最低薪水

MAX(emp.salary) over(PARTITION BY emp.manager_id) max_salary_dept, --部門的最高薪水

MAX(emp.salary) keep(dense_rank LAST ORDER BY emp.salary) over(PARTITION BY emp.manager_id) max_salary_dept_last, --部門的最高薪水

last_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) max_salary_dept_lastv, --部門的最高薪水

lag(emp.full_name, 1, '00') over(ORDER BY emp.salary DESC) last_persion, --薪水在自己前一位的人

lead(emp.full_name, 1, '00') over(ORDER BY emp.salary DESC) next_persion --薪水在自己后一位的人

FROM fwk_tbx_employees emp

ORDER BY emp.salary DESC

1. 基本概念理解

分析函數(shù)

1. 顧名思義二打,分析函數(shù)是在主查詢結(jié)果的基礎(chǔ)上進(jìn)行一定的分析棠赛,如分部門匯總,分部門求均值等等擒滑。

數(shù)據(jù)窗口

1. Oracle 分析函數(shù)建立在所謂的數(shù)據(jù)窗口之上寡润,數(shù)據(jù)窗口可以理解為一個(gè)數(shù)據(jù)集合厢塘。主查詢的數(shù)據(jù)可以按照不同的標(biāo)準(zhǔn)分割成不同的數(shù)據(jù)集咧虎。比如partition BY manager_id

按照manager_id將主查詢的數(shù)據(jù)分成N(N代表有多少個(gè)不同的Manager_id)個(gè)不同的數(shù)據(jù)窗口闺属。

2. 其次,數(shù)據(jù)窗口內(nèi)部還應(yīng)該與一定的順序通過 ORDER BY 實(shí)現(xiàn)

分析函數(shù)和GROUP BY的區(qū)別和聯(lián)系

1. 分析函數(shù)的功能大部分都可以通過GROUP BY 來聚合完成

2. 分析函數(shù)查詢出來的行數(shù)是由主查詢決定的牡昆,GROUP BY 的行數(shù)結(jié)果是由GROUP BY 后面的集合構(gòu)成的唯一性組合決定的姚炕,通常比主查詢的結(jié)果行數(shù)少。

2. 典型格式詳解

SUM(emp.salary) over(PARTITION BY emp.manager_id) sum_salary_department, --該部門薪水總額

功能簡(jiǎn)介:

當(dāng)前行對(duì)應(yīng)人員所在部門的薪水總額

AVG丢烘,count與之類似

過程理解

1. 首先將查詢出來的數(shù)據(jù)集按照MANAGER_ID分割

2. 查找到當(dāng)前行的MANAGER_ID對(duì)應(yīng)的數(shù)據(jù)集

3. 對(duì)以上數(shù)據(jù)集合求和柱宦,生成一個(gè)結(jié)果附在新添加的列中

dense_rank() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) rank_salary_dept, --該人員的部門薪水排行

功能簡(jiǎn)介:

當(dāng)前行對(duì)應(yīng)人員在所在部門的薪水排名(不出現(xiàn)并列情況,相同的值也會(huì)依次有不同的排序播瞳,且排序連續(xù))

RANK 函數(shù)與之相反掸刊,要出現(xiàn)并列的情況啊,且并列將導(dǎo)致排名不連續(xù)如A和B并列第一赢乓,那么將沒有第二名忧侧,而直接出現(xiàn)第三名

過程理解

1. 首先將查詢出來的數(shù)據(jù)集按照MANAGER_ID分割

2. 對(duì)當(dāng)前行MANAGER_ID對(duì)應(yīng)的數(shù)據(jù)集進(jìn)行排序

3. 將本行對(duì)應(yīng)的行號(hào)提取并附在附加列中

MIN(emp.salary) keep(dense_rank FIRST ORDER BY emp.salary) over(PARTITION BY emp.manager_id)??min_salary_dept_first, --部門的最低薪水

功能簡(jiǎn)介:

當(dāng)前行對(duì)應(yīng)人員在所在部門的最低薪水

MAX函數(shù)與之類似

過程理解

1. 首先將查詢出來的數(shù)據(jù)集按照MANAGER_ID分割

2. 對(duì)當(dāng)前行MANAGER_ID對(duì)應(yīng)的數(shù)據(jù)集進(jìn)行排序石窑,提取最前面的行,最前面的行的值有相等的苍柏,那么返回多行

3. 在返回的多行中尼斧,提取薪水最小的行姜贡,并提取salary字段

first_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) min_salary_dept_firstv, --部門的最低薪水

功能簡(jiǎn)介:

當(dāng)前行對(duì)應(yīng)人員在所在部門的最低薪水

last_value與之相反试吁,求的是最后一個(gè)值

過程理解

1. 首先將查詢出來的數(shù)據(jù)集按照MANAGER_ID分割

2. 對(duì)當(dāng)前行MANAGER_ID對(duì)應(yīng)的數(shù)據(jù)集進(jìn)行排序

3. 提取第一行的salary字段

LAG(EMP.FULL_NAME, 1, '00') OVER (ORDER BY EMP.SALARY DESC)??LAST_PERSION, --薪水在自己前一位的人

功能簡(jiǎn)介:

總體薪水排名中,比自己高一位的人的名字

lead 函數(shù)與之相反求的在自己后面的人

參數(shù)介紹:

LAG(p_segment, p_distance, p_defaualt_val)

1. p_segment: 需要提取的字段

2. p_distance:>=0的數(shù)楼咳,表示比當(dāng)前人員前面了幾位

3. p_defaualt_val: 當(dāng)當(dāng)前行沒有比它前的行的時(shí)候熄捍,顯示默認(rèn)值

過程理解

1. 首先將查詢出來的數(shù)據(jù)集按照薪水進(jìn)行降序排序

2. 提取前p_distance位的p_segment字段

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市母怜,隨后出現(xiàn)的幾起案子余耽,更是在濱河造成了極大的恐慌,老刑警劉巖苹熏,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碟贾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡轨域,警方通過查閱死者的電腦和手機(jī)袱耽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來干发,“玉大人朱巨,你說我怎么就攤上這事⊥鞒ぃ” “怎么了冀续?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)必峰。 經(jīng)常有香客問我洪唐,道長(zhǎng),這世上最難降的妖魔是什么吼蚁? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任桐罕,我火速辦了婚禮,結(jié)果婚禮上桂敛,老公的妹妹穿的比我還像新娘功炮。我一直安慰自己,他們只是感情好术唬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布薪伏。 她就那樣靜靜地躺著,像睡著了一般粗仓。 火紅的嫁衣襯著肌膚如雪嫁怀。 梳的紋絲不亂的頭發(fā)上设捐,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音塘淑,去河邊找鬼萝招。 笑死,一個(gè)胖子當(dāng)著我的面吹牛存捺,可吹牛的內(nèi)容都是我干的槐沼。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼捌治,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼岗钩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肖油,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤兼吓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后森枪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體视搏,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年县袱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浑娜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡显拳,死狀恐怖棚愤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杂数,我是刑警寧澤宛畦,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站揍移,受9級(jí)特大地震影響次和,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜那伐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一踏施、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧罕邀,春花似錦畅形、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肾胯,卻和暖如春竖席,著一層夾襖步出監(jiān)牢的瞬間耘纱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工毕荐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留束析,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓憎亚,卻偏偏與公主長(zhǎng)得像员寇,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虽填,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 高級(jí)函數(shù)_分析函數(shù)與窗口函數(shù) 分析函數(shù)往往與窗口函數(shù)一起使用丁恭,over()為窗口函數(shù) 一曹动、分析函數(shù) 1.01斋日、排名...
    lingoling閱讀 1,103評(píng)論 0 2
  • 一恶守、Oracle分析函數(shù)入門 分析函數(shù)是什么? 分析函數(shù)是Oracle專門用于解決復(fù)雜報(bào)表統(tǒng)計(jì)需求的功能強(qiáng)大的函數(shù)...
    牛馬風(fēng)情閱讀 282評(píng)論 0 1
  • 分析函數(shù)分為函數(shù)部分和OVER分析語句部分贡必。 函數(shù)部分就是常見的count()兔港,sum()這些函數(shù), over分析...
    下水道潛水員閱讀 357評(píng)論 0 0
  • OVER(PARTITION BY)開窗函數(shù)用法 開窗函數(shù)仔拟,Oracle從8.1.6開始提供開窗函數(shù)衫樊,開窗函數(shù)用于...
    Bobby0322閱讀 6,260評(píng)論 0 0
  • 讀的什么書:《精進(jìn)--如何成為一個(gè)很厲害的人》 閱讀有效時(shí)間:1小時(shí) 閱讀中遇到什么困難:內(nèi)存不足,理解利花、反思科侈、感...
    放松身心閱讀 195評(píng)論 0 0