分析函式——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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 兩個SQL語句技巧——NULLS FIRST/LAST和分析函式版AVGSQLNullAST函式
- 分析函式——keep(dense_rank first/last)函式AST
- 分析函式——FIRST_VALUE()和LAST_VALUE()函式AST
- Oracle分析函式-first_value()和last_value()Oracle函式AST
- 【Analytic】分析函式之LAST_VALUE函式函式AST
- 【Analytic】分析函式之FIRST_VALUE函式函式
- [轉]分析函式 last_value的使用函式AST
- OCP(11g)-----> oracle First In First Out (FIFO)/Last In First OutOracleAST
- [20170525]分析函式first_value.txt函式
- Oracle的LAST_DAY函式OracleAST函式
- [20190728]分析函式LAST_VALUE.txt函式AST
- [LeetCode] Find First and Last Position of Element in SortedLeetCodeAST
- Oracle集合的first, last , next ,count,existOracleAST
- Oracle分析函式七——分析函式案例Oracle函式
- Leetcode 34 Find First and Last Position of Element in Sorted ArrayLeetCodeAST
- Oracle聚合函式/分析函式Oracle函式
- 分析函式函式
- oracle集合型別的first、next、prior、last方法.TXTOracle型別AST
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- 分析函式概述函式
- 分析函式 over函式
- Oracle 分析函式Oracle函式
- 分析函式 - LAG函式
- Oracle分析函式Oracle函式
- Oracle分析函式與視窗函式Oracle函式
- 【Analytic】分析函式之MIN函式函式
- 【Analytic】分析函式之MAX函式函式
- 【Analytic】分析函式之AVG函式函式
- 【Analytic】分析函式之RANK函式函式
- 【Analytic】分析函式之COUNT函式函式
- oracle 10g函式大全--分析函式Oracle 10g函式
- sql優化用group by 函式代替分析函式SQL優化函式
- Hive之分析函式Hive函式
- 分析函式——NTILE(n)函式
- 分析函式——統計函式
- oracle 分析函式(轉)Oracle函式
- oracle分析函式(一)Oracle函式
- Oracle常用分析函式Oracle函式