分析函式——NULLS FIRST/LAST
透過RANK()、DENSE_RANK()、ROW_NUMBER()對記錄進行全排列、分組排列取值
但有時候,會遇到空值的情況,空值會影響得到的結果的正確性
例:
銷售表:
SQL> select * from criss_sales;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT
------- ----------- ---------- -----------
D01 2014/3/4 G00 700
D02 2014/3/6 G00 500
D01 2014/4/8 G01 200
D02 2014/4/27 G01 300
D01 2014/4/30 G03 800
D02 2014/5/2 G03 900
D01 2014/5/4 G02 80
D02 2014/4/8 G02 100
D01 2014/6/12 G01
SQL> select
2 dept_id
3 ,sale_date
4 ,goods_type
5 ,sale_cnt
6 ,rank() over (partition by dept_id order by sale_cnt desc)
7 from criss_sales
8 ;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT RANK()OVER(PARTITIONBYDEPT_IDO
------- ----------- ---------- ----------- ------------------------------
D01 2014/6/12 G01 1
D01 2014/4/30 G03 800 2
D01 2014/3/4 G00 700 3
D01 2014/4/8 G01 200 4
D01 2014/5/4 G02 80 5
D02 2014/5/2 G03 900 1
D02 2014/3/6 G00 500 2
D02 2014/4/27 G01 300 3
D02 2014/4/8 G02 100 4
我們可以看到部門D01中的銷售數量為NULL的記錄排名居然是第一,這顯然是不對的。
此時,就需要用到NULLS LAST來處理
處理後結果如下:
SQL> select
2 dept_id
3 ,sale_date
4 ,goods_type
5 ,sale_cnt
6 ,rank() over (partition by dept_id order by sale_cnt desc nulls last)
7 from criss_sales
8 ;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT RANK()OVER(PARTITIONBYDEPT_IDO
------- ----------- ---------- ----------- ------------------------------
D01 2014/4/30 G03 800 1
D01 2014/3/4 G00 700 2
D01 2014/4/8 G01 200 3
D01 2014/5/4 G02 80 4
D01 2014/6/12 G01 5
D02 2014/5/2 G03 900 1
D02 2014/3/6 G00 500 2
D02 2014/4/27 G01 300 3
D02 2014/4/8 G02 100 4
這樣就得到了期望的結果。
NULLS FIRST/LAST 可以幫助我們在處理含有空值的排序排列中,將空值欄位記錄放到最前或最後顯示,幫助我們得到期望的結果。
但有時候,會遇到空值的情況,空值會影響得到的結果的正確性
例:
銷售表:
SQL> select * from criss_sales;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT
------- ----------- ---------- -----------
D01 2014/3/4 G00 700
D02 2014/3/6 G00 500
D01 2014/4/8 G01 200
D02 2014/4/27 G01 300
D01 2014/4/30 G03 800
D02 2014/5/2 G03 900
D01 2014/5/4 G02 80
D02 2014/4/8 G02 100
D01 2014/6/12 G01
SQL> select
2 dept_id
3 ,sale_date
4 ,goods_type
5 ,sale_cnt
6 ,rank() over (partition by dept_id order by sale_cnt desc)
7 from criss_sales
8 ;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT RANK()OVER(PARTITIONBYDEPT_IDO
------- ----------- ---------- ----------- ------------------------------
D01 2014/6/12 G01 1
D01 2014/4/30 G03 800 2
D01 2014/3/4 G00 700 3
D01 2014/4/8 G01 200 4
D01 2014/5/4 G02 80 5
D02 2014/5/2 G03 900 1
D02 2014/3/6 G00 500 2
D02 2014/4/27 G01 300 3
D02 2014/4/8 G02 100 4
我們可以看到部門D01中的銷售數量為NULL的記錄排名居然是第一,這顯然是不對的。
此時,就需要用到NULLS LAST來處理
處理後結果如下:
SQL> select
2 dept_id
3 ,sale_date
4 ,goods_type
5 ,sale_cnt
6 ,rank() over (partition by dept_id order by sale_cnt desc nulls last)
7 from criss_sales
8 ;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT RANK()OVER(PARTITIONBYDEPT_IDO
------- ----------- ---------- ----------- ------------------------------
D01 2014/4/30 G03 800 1
D01 2014/3/4 G00 700 2
D01 2014/4/8 G01 200 3
D01 2014/5/4 G02 80 4
D01 2014/6/12 G01 5
D02 2014/5/2 G03 900 1
D02 2014/3/6 G00 500 2
D02 2014/4/27 G01 300 3
D02 2014/4/8 G02 100 4
這樣就得到了期望的結果。
NULLS FIRST/LAST 可以幫助我們在處理含有空值的排序排列中,將空值欄位記錄放到最前或最後顯示,幫助我們得到期望的結果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28929558/viewspace-1181121/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle分析函式-first_value()和last_value()Oracle函式AST
- [20190728]分析函式LAST_VALUE.txt函式AST
- [LeetCode] Find First and Last Position of Element in SortedLeetCodeAST
- Oracle的LAST_DAY函式OracleAST函式
- Leetcode 34 Find First and Last Position of Element in Sorted ArrayLeetCodeAST
- json_strip_nullsJSONNull
- Oracle分析函式與視窗函式Oracle函式
- Hive之分析函式Hive函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- MySQL分析函式實現MySql函式
- Linux中select()函式分析Linux函式
- count 函式原始碼分析函式原始碼
- (未完成)APC函式的執行,分析 KiDeliverApc 函式函式IDE
- ORACLE分析函式手冊(轉)Oracle函式
- openGauss 高階分析函式支援函式
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- Data Lake Analytics的Geospatial分析函式函式
- 常用分析函式開窗講解函式
- 分析函式改寫自關聯函式
- ORACLE分析函式手冊二(轉)Oracle函式
- Python函式用法和底層分析Python函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 排名前100的PHP函式及分析PHP函式
- redux原始碼分析之四:compose函式Redux原始碼函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 7.121 LASTAST
- Last danceAST
- hive視窗分析函式使用詳解系列二之分組排序視窗函式Hive函式排序
- 20201023_081.遞迴函式_函式呼叫記憶體分析_棧幀的建立遞迴函式記憶體
- 13、MySQL Case-MySQL分析函式實現MySql函式
- chatgpt生成的所有分析函式,感覺很好.ChatGPT函式
- 準備應用導數來分析函式函式
- 使用SQL以及函式等做資料分析SQL函式
- Rxjs 裡 subscribeToArray 工具函式的詳細分析JS函式
- WOW懷舊 發包函式分析 並 HOOK函式Hook
- Hive 分析函式lead、lag例項應用Hive函式
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式