ORACLE函式介紹第五篇 分析函式簡述
注:N表示數字型,C表示字元型,D表示日期型,[]表示內中引數可被忽略,fmt表示格式。
分析函式計算基於group by的列,分組查詢出的行被稱為"比照(window)",在根據over()執行過程中,針對每一行都會重新定義比照。比照為"當前行(current row)"確定執行計算的行的範圍。這點一定要理解清楚。它是分析函式生成資料的原理。如果此處模糊,那麼你在應用分析函式時恐就不會那麼得心應手了。
分析函式與前面章節中講到的聚合函式非常相似,不同於聚合函式的地方在於它們每個分組序列均返回多行。在本節示例中會同時應用兩種函式做對比,以更好體現二者的差異。通過本章節練習相信大家就會注意到,部分聚合函式和分析函式是同一個命令,事實確實如此。如果從語法格式上區分的話,沒加over()的即是聚合函式,加了over()即是分析函式:)
有一點需要注意喲,除了order by子句的運算外,分析函式在SQL語句中將會最後執行。因此,分析函式只能應用於select的列或order by子句中(記住嘍,千萬別扔到什麼where、group by、having之類的地方了)。也正因此,同名的函式在做為聚合函式和分析函式時得出的結果可能不相同,就是因為此處運算邏輯不同造成的。
同時,部分分析函式在選擇列時支援distinct,如果你指定了該引數,則over條件中就只能指定partition子句,而不能再指定order by 子句了。
分析函式的語法結構比較複雜,但多數函式都具有相同的語法結構,所以先在之前進行統一介紹,後續單個函式介紹時就不過多說明函式語法結構了。
基本上所有的分析函式均是這種格式:
函式名稱 ([引數]) OVER (analytic_clause)
analytic_clause包含:[partition 子句][ order 子句 [window子句]]
Partition 子句:Partition by exp1[ ,exp2]...
Partition沒啥說的,功能強大引數少,主要用於分組,可以理解成select中的group by。不過它跟select語句後跟的group by 子句並不衝突。
Order子句:Order by exp1[asc|desc] [ ,exp2 [asc|desc]]... [nulls first|last]。部分函式支援window子句。
Order by的引數基本與select中的order by相同。大家按那個理解就是了。Nulls first|last是用來限定nulls在分組序列中的所在位置的,我們知道oracle中對於null的定義是未知,所以預設ordery的時候nulls總會被排在最前面。如果想控制值為null的列的話呢,nulls first|last引數就能派上用場了。
Window子句:En,貼個圖吧
看起來複雜其實簡單,而且應用的機率相當的低,不詳細介紹了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-22282/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE函式介紹第六篇 著名函式之分析函式Oracle函式
- Oracle 分析函式使用介紹(轉)Oracle函式
- ORACLE函式介紹Oracle函式
- ORACLE函式介紹第八篇 綜述Oracle函式
- ORACLE函式介紹第七篇 非著名函式之分析函式Oracle函式
- 函式表示式和函式宣告簡單介紹函式
- 【函式】Oracle TRIM函式語法介紹函式Oracle
- oracle常用函式介紹Oracle函式
- oracle REPLACE 函式 介紹Oracle函式
- oracle 日期函式介紹Oracle函式
- ORACLE函式介紹第三篇 著名函式之聚合函式Oracle函式
- Oracle 的基本函式介紹Oracle函式
- oracle lag與lead分析函式簡介Oracle函式
- ORACLE函式介紹第四篇 非著名函式之聚合函式Oracle函式
- javascript匿名函式簡單介紹JavaScript函式
- 簡單介紹JS函式防抖和函式節流JS函式
- ORACLE函式介紹第一篇 著名函式之單值函式Oracle函式
- ORACLE函式介紹第二篇 非著名函式之單值函式Oracle函式
- Oracle聚合函式/分析函式Oracle函式
- 原創:oracle聚合函式介紹Oracle函式
- Oracle 8 的函式介紹(轉)Oracle函式
- Oracle分析函式七——分析函式案例Oracle函式
- 函式式 JavaScript 簡介函式JavaScript
- TypeScript 函式介紹TypeScript函式
- javascript call()函式用法簡單介紹JavaScript函式
- javascript trim()函式用法簡單介紹JavaScript函式
- getFullYear()函式用法簡單介紹函式
- document.close()函式簡單介紹函式
- js isPrototypeOf()函式用法簡單介紹JS函式
- javascript高階函式簡單介紹JavaScript函式
- jQuery建構函式簡單介紹jQuery函式
- javascript函式呼叫方式簡單介紹JavaScript函式
- Oracle中CAST函式使用簡介OracleAST函式
- 高階函式簡述 js函式JS
- 正規表示式使用replace()函式簡單介紹函式
- 10-函式-1-函式簡介函式
- 簡述箭頭函式和普通函式的區別函式
- match函式簡單介紹以及與index函式結合應用函式Index