日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

常用Oracle分析函数详解

發布時間:2025/3/11 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用Oracle分析函数详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:http://www.cnblogs.com/benio/archive/2011/06/01/2066106.html

---------------------------------------------------------------------------

學習步驟:
1. 擁有Oracle EBS demo 環境 或者 PROD 環境
2. copy以下代碼進 PL/SQL
3. 配合解釋分析結果
4. 如果網頁有點亂請復制到TXT中查看

/*假設一個經理代表了一個部門
*/
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, --行號
? ?? ? 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. 基本概念理解
??
? ???分析函數
? ?? ???1. 顧名思義,分析函數是在主查詢結果的基礎上進行一定的分析,如分部門匯總,分部門求均值等等。
? ???
? ???數據窗口
? ?? ???1. Oracle 分析函數建立在所謂的數據窗口之上,數據窗口可以理解為一個數據集合。主查詢的數據可以按照不同的標準分割成不同的數據集。比如partition BY manager_id?
? ???按照manager_id將主查詢的數據分成N(N代表有多少個不同的Manager_id)個不同的數據窗口。
? ?? ???2. 其次,數據窗口內部還應該與一定的順序通過 ORDER BY 實現
? ???
? ???分析函數和GROUP BY的區別和聯系
? ?? ???1. 分析函數的功能大部分都可以通過GROUP BY 來聚合完成
? ?? ???2. 分析函數查詢出來的行數是由主查詢決定的,GROUP BY 的行數結果是由GROUP BY 后面的集合構成的唯一性組合決定的,通常比主查詢的結果行數少。
? ?? ?? ??
? ???
??2. 典型格式詳解
? ???
? ???SUM(emp.salary) over(PARTITION BY emp.manager_id) sum_salary_department, --該部門薪水總額
? ??
? ?功能簡介:
? ???當前行對應人員所在部門的薪水總額
? ???AVG,count與之類似
? ???
? ?過程理解
? ???1. 首先將查詢出來的數據集按照MANAGER_ID分割
? ???2. 查找到當前行的MANAGER_ID對應的數據集
? ???3. 對以上數據集合求和,生成一個結果附在新添加的列中
? ???
? ?? ?? ??
? ???dense_rank() over(PARTITION BY emp.manager_id ORDER BY emp.salary DESC) rank_salary_dept, --該人員的部門薪水排行
? ???
? ?功能簡介:
? ???當前行對應人員在所在部門的薪水排名(不出現并列情況,相同的值也會依次有不同的排序,且排序連續)
? ???RANK 函數與之相反,要出現并列的情況啊,且并列將導致排名不連續如A和B并列第一,那么將沒有第二名,而直接出現第三名
? ?過程理解
? ???1. 首先將查詢出來的數據集按照MANAGER_ID分割
? ???2. 對當前行MANAGER_ID對應的數據集進行排序
? ???3. 將本行對應的行號提取并附在附加列中
? ???
? ???MIN(emp.salary) keep(dense_rank FIRST ORDER BY emp.salary) over(PARTITION BY emp.manager_id)??min_salary_dept_first, --部門的最低薪水
? ???
? ?功能簡介:
? ???當前行對應人員在所在部門的最低薪水
? ???MAX函數與之類似
? ?過程理解
? ???1. 首先將查詢出來的數據集按照MANAGER_ID分割
? ???2. 對當前行MANAGER_ID對應的數據集進行排序,提取最前面的行,最前面的行的值有相等的,那么返回多行
? ???3. 在返回的多行中,提取薪水最小的行,并提取salary字段
? ???
? ???first_value(emp.salary) over(PARTITION BY emp.manager_id ORDER BY emp.salary) min_salary_dept_firstv, --部門的最低薪水??
? ???
??功能簡介:
? ???當前行對應人員在所在部門的最低薪水
? ???last_value與之相反,求的是最后一個值
? ?
? ?過程理解
? ???1. 首先將查詢出來的數據集按照MANAGER_ID分割
? ???2. 對當前行MANAGER_ID對應的數據集進行排序
? ???3. 提取第一行的salary字段
? ???
? ???
? ?LAG(EMP.FULL_NAME, 1, '00') OVER (ORDER BY EMP.SALARY DESC)??LAST_PERSION, --薪水在自己前一位的人
? ???
? ?功能簡介:
? ???總體薪水排名中,比自己高一位的人的名字
? ???lead 函數與之相反求的在自己后面的人
? ??
? ?參數介紹:
? ???LAG(p_segment, p_distance, p_defaualt_val)
? ???1. p_segment: 需要提取的字段
? ???2. p_distance:>=0的數,表示比當前人員前面了幾位
? ???3. p_defaualt_val: 當當前行沒有比它前的行的時候,顯示默認值
? ?
? ?過程理解
? ???1. 首先將查詢出來的數據集按照薪水進行降序排序
? ???2. 提取前p_distance位的p_segment字段

總結

以上是生活随笔為你收集整理的常用Oracle分析函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩aaa | 黑人借宿巨大中文字幕 | 欧美性生交片4 | 精品爆乳一区二区三区 | 亚洲av无码国产精品久久不卡 | 一级做a爰片久久毛片潮喷 天天透天天干 | 久久精品国产一区二区三区 | 欧美在线一 | 青青青免费在线 | gogo人体做爰大胆视频 | 亚欧精品视频一区二区三区 | www.插插插 | 欧美视频在线免费 | 激情福利社 | 日韩精品一二三四区 | 少妇精品无码一区二区 | 一级片欧美 | 亚洲福利视频网站 | av毛片观看 | 天天插天天摸 | 少妇一级免费 | 精品国产综合区久久久久久 | 成人在线观看网站 | 99视频网站 | 欧美九九九 | 免费的三级网站 | 影音先锋在线播放 | 午夜久久网 | 奇米影视777四色 | 日本妈妈3| 蜜色av | 特黄特色大片免费播放器使用方法 | 北条麻妃一区二区三区 | 国精产品一二三区精华液 | 草草视频在线 | 四虎国产 | 亚洲国产精品自拍视频 | 日本www视频在线观看 | 男人午夜天堂 | 亚洲精品久久久久久久久久久 | 久久三级网站 | 国产亚洲在线观看 | www.日韩精品 | 婷久久 | 亚洲色图综合在线 | 亚州精品视频 | 激情小说激情视频 | 国产一区二区伦理 | 激情欧美一区二区 | 香蕉网站在线观看 | 好看的毛片 | 影音先锋在线中文字幕 | 天天碰天天| 91在线精品播放 | 天堂成人在线观看 | 欧美色鬼 | 国产精品一区二区人人爽 | 人人看人人看 | а√天堂资源官网在线资源 | 久久久久久蜜桃 | 人妖性生活视频 | 久久久久亚洲av片无码 | jzzijzzij亚洲成熟少妇在线观看 久久久精品人妻一区二区三区 | 日韩av毛片在线观看 | 在线观看黄色大片 | 精品在线免费播放 | 噜噜狠狠狠狠综合久久 | 办公室荡乳欲伦交换bd电影 | 亚洲精品三级 | 亚洲美女色 | 欧美女人一区二区 | 人妖交videohd另类 | 男人激烈吮乳吃奶爽文 | 久久天堂| 亚洲女同女同女同女同女同69 | 男女涩涩| 麻豆网站在线看 | 探花国产在线 | 极品白嫩丰满美女无套 | 最新高清无码专区 | 久久er99热精品一区二区 | 风韵丰满熟妇啪啪区老熟熟女 | 日韩午夜小视频 | 人妻在客厅被c的呻吟 | 亚洲视频在线观看一区 | 久久色在线观看 | h片在线免费看 | 免费看黄色三级三级 | 6080亚洲精品一区二区 | 亚洲www久久久 | 国产午夜免费视频 | 日本午夜网 | 人善交videos欧美3d动漫 | 日本久久网 | 无码aⅴ精品一区二区三区 精品久久在线 | 午夜爱爱网 | 日韩人妻一区二区三区 | 青草精品视频 | 久久综合久久久 |