之前進行資料統計時一直用的group by,各種子查詢,外鏈結等等。雖然知道分析函式卻用的不太多。最近對分析函式進行進一步的學習,整理一些學習成果。
分析函式語法:
analytic-function(,,…)
over(
-clause
>
<
order
-by-clause
>
>
)
例項:
select ename 姓名,
deptno 部門,
sal 薪資,
--該員工所在部門的薪資總和
sum(nvl(sal,0)) over (partition by deptno order
by deptno) 部門薪資總和 ,
--該員工所在部門的最高薪資
max(nvl(sal,0)) over(partition by deptno order
by deptno) 部門薪資最大值,
--該員工在該部門薪資排行
row_number() over(partition by deptno order
by nvl(sal,0) desc) 該員工在該部門薪資排行,
--該員工在該部門薪資佔比(百分制,保留兩位小數)
round(ratio_to_report(nvl(sal,0)) over(partition by deptno) * 100 ,2)該員工在該部門薪資佔比,
--該員工在全部部門薪資排行
row_number() over( order
by nvl(sal,0) desc) 該員工在全部部門薪資排行,
--該員工的薪資打敗了百分之多少的人
round((1-percent_rank() over( order
by nvl(sal,0) desc) )* 100 ,2)打敗佔比
from emp order
by deptno
上面我使用的是當nvl
定義當sal
為空時,讓其為0,這樣一方面的考慮合理性,另一方面是避免空值位於no.1,做排名時,oracle預設將空值置於第一位。當然你也可以使用nulls last
。 oracle 分析函式的使用
1.rownum與rowid rownum 行數 行號.在查詢語句中之使用於 rowid 編碼 編號 唯一識別號.他們都是偽列,可以理解成表中的乙個列只是他們並不是你建立的。同樣是偽列區別是什麼呢?rowid是你錄入資料時有資料庫自動為這條記錄新增的唯一的18位編號是乙個物理編號用於找到這條記錄 順...
oracle分析函式的使用
1.實現組資料的相加,如下列資料,以前的處理方法是在前台進行加總處理。如果用分析函式處理就直接在後台處理了。74pcs 74 4 pcs70 1pcs 69 4 pcs65 4pcs 61100 pcs161 4pcs 157 2 pcs155 2pcs 153 2 pcs151 2pcs 1492...
oracle中的函式使用
摘要 一函式的基本應用 1 建立函式 sql視窗中 create or replace function get hello msg return varchar2 as begin return hello world end get hello msg 函式必須有返回值,該函式的返回值是varc...