常用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字段

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538454.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

XML文件結構和基本語法

XML文件的結構性內容,包括節點關系以及屬性內容等等。元素是組成XML的最基本的單位,它由開始標記,屬性和結束標記組成。就是一個元素的例子,每個元素必須有一個元素名,元素可以若干個屬性以及屬性值。 xml文件和html文…

python表格數據分類聚合_3-python數據分析-pandas高級操作之替換、映射、隨機抽樣、分組、高級數據聚合、數據加載、透視表、交叉表...

3-python數據分析-pandas高級操作之替換、映射、隨機抽樣、分組、高級數據聚合、數據加載、透視表、交叉表替換操作 replace替換操作可以同步作用于Series和DataFrame中單值替換普通替換: 替換所有符合要求的元素:to_replace15,value’e’按列指定單值替換&#xff…

oracle-SQL-case when 改用 DECODE

SELECT CASE FLOOR_LINE_ID WHEN 1 THEN 高鐵 WHEN 2 THEN 高速 WHEN 3 THEN 公路 WHEN 5 THEN 地鐵 ELSE 其他 END AS LINE_NAME, FLOOR_LINE_ID FROM ( SELECT FLOOR(LINE_ID/100) AS FLOOR_LINE_ID FROM DT4_LINE_NAME ) 改…

lcp mysql cluster_Mysql Cluster 非root用戶啟動ndbd節點報錯

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓1.配置文件,如下:[rootcent178 ~]# ls -lart /etc/my.cnf-rw-rw-r-- 1 mysql mysql 3055 Oct 31 17:29 /etc/my.cnf2.集群數據存儲文件夾,如下:[rootcent178 ~]# ls -lart /var/lib/m…

fatal: Could not read from remote repository.的解決辦法

原文地址:http://blog.csdn.net/huahua78/article/details/52330792 --------------------------------------------------------------------------------- 查看遠端地址 git remote –v 查看配置 git config --list git status git add . // 暫存所有的更改git…

python中mako中loop_python中Mako庫實例用法

Mako是一個模板庫。一種嵌入式的語言,能夠實現簡化組件布局以及繼承,主要的用途也是和作用域有關,但是效果是最直接切靈活的,這些都是mako的基本功能,掌握了基礎內容,接下來就是詳細的了解講述,…

springmvc是什么_SpringBoot與SpringMVC的區別是什么?

簡單的來說:SpringMVC和SpringBoot都是Spring家族的重要成員。Spring家族的使命就是為了簡化而生。SpringMVC簡化我們日常Web開發的,后來隨著自身的發展,SpringMVC變得臃腫復雜,而SpringBoot則進一步簡化了SpringMVC開發。SpringM…

git 上傳代碼到碼云

與碼云建立連接教程:http://blog.csdn.net/zengmingen/article/details/76045076 如果完成了上面步驟的,且有了git。上傳項目步驟: 代碼提交 代碼提交一般有五個步驟: 1.查看目前代碼的修改狀態 2.查看代碼修改內容 3.暫存需要提交…

你不知道的js中關于this綁定機制的解析[看完還不懂算我輸]

前言 最近正在看《你不知道的JavaScript》,里面關于this綁定機制的部分講的特別好,很清晰,這部分對我們js的使用也是相當關鍵的,并且這也是一個面試的高頻考點,所以整理一篇文章分享一下這部分的內容,相信看…

visual studio過期登錄不了賬戶_具有最高管理權限賬戶,Windows 7設置Administrator密碼永不過期...

今天介紹操作系統具有最高管理權限的賬戶,Windows 7如何設置Administrator賬戶密碼永不過期。小伙伴們可能不知道,和Windows Vista操作系統一樣,在Windows 7操作系統中是不能預先使用Administrator這個具有最高管理權限的賬戶的。同時也可能不…

Tomcat安裝與環境變量的配置-Linux+windows

原文鏈接:http://jingyan.baidu.com/article/8065f87fcc0f182330249841.html ------------------------------------------------------------ 1,新建變量名:JAVA_HOME,變量值:C:\Program Files\Java\jdk1.7.0 2&…

python如何讀取配置文件獲取url以及hhead_讀取INI配置文件內容(頭文件head)

/************************************************************FileName: getini.h // 文件名稱Author: yuanfen127 // 作者Date: 2005-03-31 // 日期Description: // 描述本文件的內容,功能,內部各部分之間的關系// 以及文本文件與…

cad隱藏圖層命令快捷鍵_cad快捷鍵f是什么命令?cad中f快捷鍵都有哪些?

1. F1 該功能鍵打開AutoCAD幫助窗口。如果用戶遇到此軟件中的任何功能問題,它可以使用戶在線獲得幫助。如果用戶離線工作,而不是按此鍵,則該軟件的所有功能都將以PDF格式打開。 2. F2 該鍵將打開一個彈出屏幕,在底部顯示命令行。該命令對于在屏幕底部看不到命令窗口的用戶很…

angular2或4部署到tomcat中,讓他跑起來

原文地址:http://blog.csdn.net/rotating_windmill/article/details/76768793 ------------------------------------------------------------------------- 首先使用構建命令(npm run build或ng build)打包,打包完成后項目中會出現一個dist的目錄&…

java 高級編程進階_JAVA高級編程之hibernate進階學習

二級緩存hibernate的session緩存在事務級別進行持久化數據的緩存操作。 當然,也有可能分別為每個類(或集合),配置集群、或 JVM 級別(SessionFactory 級別)的緩存。你甚至可以為之插入一個集群的緩存。注意,緩存永遠不知道其他應用程序對持久化…

SpringMvc+Tomcat+Angular4 部署運行

這次的團隊開發是,前端開發人員和后臺開發人員完全分開開發的。 前端開發采用了Angular4,webstorm 后端開發采用了:springspringmvcmybatis,eclipse --------------------------------------- 最后要整合了。 1、angular項目編…

python爬蟲本科容易找工作嗎_python爬蟲基礎學完了,我真的能找到一份工作嗎?...

1.能不能找到工作我覺得取決于你技術掌握的程度。2.無論在什么領域,只要你技術到家,都不用愁找不到工作。3.多數人問他們轉行能不能找到工作,是想知道這個崗位需要的人多不多,在爬蟲這個領域,從事這方面的人應該也不少…

jqgrid demo java_java – jqgrid如何顯示服務器端消息

我使用jqGrid以表格格式顯示數據,使用JSP和servlet.編輯我想在執行插入,更新,刪除等操作時顯示來自服務器的錯誤. (數據類型:“xml”)jqGrid的jQuery("#list10_d").jqGrid({height:250,width:600,url:Assignment?actionAssign,datatype: "xml"…

IPv4地址分類及特征

IPv4地址分類及特征 IP地址后斜杠和數字代表的意思 其中有這樣一個IP地址的格式:IP/數字,例如:111.222.111.222/24這種格式平時在內網中用的不多,所以一下子看不懂,最后查了資料才知斜杠后的數字代表的是掩碼的位數 “…

查看Scala編譯的.class文件

Scala是基于JDK運行的,必然會生成Java的字節碼文件.class文件。 如何查看? 編碼IDE:IntelliJ IDEA 2017.2 x64 查看class文件工具:jd-gui scala代碼如下: person.scala package cn.zengmg.day26class Person {val …