oracle 函數(聚合函數等等)精華

基本轉自 tianlesoftware  ,使用過新的便更新。

--聚合函數根據group的情況,返回每個groups裏的一個result。 聚合函數可以使用orderby 和 having 的子句中使用。

分析函數的over()部分的分析字句有3部分構成,分區語句,排序語句和窗口語句。
        (1)分區語句(partition by):將查詢結果分爲不同的組,功能類似於group by語句,是分析函數工作的基礎。默認是將所有結果作爲一個分組。
        (2)排序語句(order  by):將每個分區進行排序。
        (3)窗口語句:定義當前窗口,具體說是對每一個分組,按照給定的排序規則排序後,從分組的頂部到底部依次迭代,每次針對當前的行可以定義一個包含若干行的窗口。如果省略了窗口語句,默認使用從分組第一行到當前行的分組。


1.  Over()開窗函數

2.  Nvl()函數
3.  Rollup,Cube自動彙總函數
4.  Rank,Dense_rank,Row_number函數
5.  Lag , Lead函數
6.  Sum,Avg, Count, Max函數
7.  Ratio_to_report報表處理函數
8.  First,Last,First_value,Last_value取基數的分析函數

9.  Greatest,Least 函數

10. Trunc, Round,Decode, Substr函數



  1. /* Formattedon 2009/11/08 20:36 (Formatter Plus v4.8.8) */  
  2. SELECT  GROUPING_ID (student_name, subjects), student_name, subjects,  
  3.          SUM (score)  
  4.     FROM studentscore  
  5. GROUP BY ROLLUP (student_name, subjects)  
  6. ORDER BY 1;  
  7.    
  8.    
  9. /* Formattedon 2009/11/08 20:36 (Formatter Plus v4.8.8) */  
  10. SELECT  GROUPING (student_name), GROUPING (subjects),  
  11.          CASE  
  12.             WHEN GROUPING (student_name) = 0  
  13.                  AND GROUPING (subjects) = 1  
  14.                THEN ' 學生成績合計 '  
  15.             WHEN GROUPING (student_name) = 1  
  16.                  AND GROUPING (subjects) = 0  
  17.                THEN ' 課目成績合計 '  
  18.             WHEN GROUPING (student_name) = 1  
  19.                  AND GROUPING (subjects) = 1  
  20.                THEN ' 總                 計 '  
  21.             ELSE ''  
  22.          END summary,  
  23.          student_name, subjects, SUM (score)  
  24.     FROM studentscore  
  25. GROUP BY CUBE (student_name, subjects)  
  26. ORDER BY 1, 2;  


 (1) ROW_NUMBER:

Row_number函數返回一個唯一的值,當碰到相同數據時,排名按照記錄集中記錄的順序依次遞增。

 (2)DENSE_RANK:

Dense_rank函數返回一個唯一的值,除非當碰到相同數據時,此時所有相同數據的排名都是一樣的。

 (3) RANK:

Rank函數返回一個唯一的值,除非遇到相同的數據時,此時所有相同數據的排名是一樣的,同時會在最後一條相同記錄和下一條不同記錄的排名之間空出排名。




2.5 lag,lead函數

lag(expression,<offset>,<default>)  函數可以訪問組內當前行之前的行,

lead(expression,<offset>,<default>) 函數則正相反,可以反問組內當前行之後的行.
其中,offset是正整數,默認爲1.因組內第一個條記錄沒有之前的行,最後一行沒有之後的行,它表示要取列第N行之前或者之後的值,default就是用於處理這樣的信息,默認爲空.它用於當之前或者之後第N行不存在時的值。




分析函數RATIO_TO_REPORT 用來計算當前記錄的指標expr佔開窗函數over中包含記錄的所有同一指標的百分比. 這裏如果開窗函數的統計結果爲null或者爲0,就是說佔用比率的被除數爲0或者爲null, 則得到的結果也爲0.





行轉列函數   pivot 



c4 as (select * from b4 pivot (sum(money) tm for (ap) in (('a') a,('b') b,('c') c,('d') d,('e') e)))  

select * from t pivot (sum(a) aa,sum(b) bb for ( c,d) in (('啊',3) ss,('a',5) sss))





create table test(id number,name varchar2(20));
 
insert into test values(1,'a');
insert into test values(1,'b');
insert into test values(1,'c');
insert into test values(2,'d');
insert into test values(2,'e');
1
select wm_concat(name) name from test;
\



to_char(substr(mw.context_,1,1000))



  1. select regexp_substr('a,b,c,','[^,]+',1,rownum)   
  2.  from dual connect by rownum<=length(regexp_replace('a,b,c,''[^,]', null))   


SELECT REGEXP_SUBSTR (‘first field, second field , third field’, ‘[^,]+’, 1,rownum) 
    FROM DUAL 
    CONNECT BY ROWNUM <= 
    LENGTH (‘first field, second field , third field’) – LENGTH (REPLACE (‘first field, second field , third field’, ‘,’, ”)) 
    +1


發佈了6 篇原創文章 · 獲贊 7 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章