您好,登錄后才能下訂單哦!
聚合函數可以在分析模式或非分析模式下來進行運算。非分析模式下的聚合函數將結果集削減為較少的數據行。然而,在分析模式下,聚合函數并不減少輸出結果行數。并且,聚合函數能夠在一行中同時取得聚合和非聚合的列。分析模式的聚合函數提供了不需要任何自連接就可以聚合不同層級數據的能力。
1. sum
可以把sum當做聚集函數來用,也可以當做分析函數來用
與前一個sql不同的是窗口的變化,這個例子中取的是開始行到當前行,即對當前行之前的行(包括當前行)求和
從結果中很容易理解sum分析函數
2. avg
和sum差不多,就不多說了
上面這兩個語句是等價的,看看結果
下面這個語句,每三行求一次平均(前,中,后)
3. lag
lag提供一種方式訪問當前位置的前面的行,默認offset是1,表示訪問前一行
4. lead
利用lead可以訪問當前位置后面的行
5. first_value和last_value
first_value取窗口中的第一個值,last_value取最后一個
6. rank
rank,意為排名、等級。
rank函數返回一個行的排名,值相等的行排名相同,排名是不連續的。對于top-N和bottom-N這樣的操作來說,rank函數是很有用的。rank作為聚集函數時返回某一個假定值的排名,作為分析函數時返回每一行的排名。
7. row_number
row_number是一個分析函數,它給每一行指定一個編號,編號從1開始。
這個函數可以實現top-N,bottom-N,inner-N這樣的操作。
注意也rownum偽列區分開,rownum對于每一行都返回一個數以表明被選中的順序,比如1, 2……
8. listagg
listagg函數用于列轉行
作為一個單行聚集函數,listagg作用于所有行并返回單一的一行
作為一個分組聚集函數,listagg作用于每個組,并為每個組返回一行
作為一個分析函數,listagg基于查詢分區字句將數據分區,并為每個分區中的每一行返回相同的結果
measure_expr,指定要操作的列或表達式
delimiter_expr,指定分隔符
order_by_clause,決定結果的順序
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。