分析函数——NULLS FIRST/LAST

本文介绍了如何使用SQL的RANK()函数对包含空值的数据进行排序,并通过NULLSLAST参数确保空值被放置在排序结果的末尾。通过具体实例展示了处理前后数据排序的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过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 可以帮助我们在处理含有空值的排序排列中,将空值字段记录放到最前或最后显示,帮助我们得到期望的结果。







来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28929558/viewspace-1181121/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28929558/viewspace-1181121/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值