order by 用法

在使用ORDER BY DESC进行排序时,空值会被默认排在最前面,这可能导致不符合预期的结果。例如,按注册资金从大到小排序时,空值会出现在首位,而非预期的大额资金。本文介绍如何避免此类问题,包括将空值转换为0或使用NULLS LAST关键字。

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

用order by排序时,默认空值放在最后面,但是如果是order by desc ,那么空值默认就是放在最前面:

ETL@RACTEST> select a,rowid from liutest order by a;

A ROWID
---------- ------------------
1 AAF0+EAD0AAAGntAAA
2 AAF0+EAD0AAAGntAAB
AAF0+EAD0AAAGntAAC

Elapsed: 00:00:00.03
ETL@RACTEST> select a,rowid from liutest order by a desc;

A ROWID
---------- ------------------
AAF0+EAD0AAAGntAAC
2 AAF0+EAD0AAAGntAAB
1 AAF0+EAD0AAAGntAAA

Elapsed: 00:00:00.01



这是一个小问题,但是在现实应用中如果犯错那就是大问题!试想我要对注册资金(reg_capital)进行从大到小排序,那么如果order by reg_capital desc 中的reg_capital存在空值,那完全就不是按注册资金从大到小排序,是把没有注册资金的全部排在了最前面,这简直就是是非颠倒,黑白不分!

因此当用order by desc排序时,一定要注意看有没有空值,否则就会产生“想找最好的却找了最差的,想找最多的却找了最少的”这样的效果!

解决这类问题有两个方法,根据具体需要而定。

1.对空值进行转换处理,例如转换成0

2.排序时使用nulls last关键字,如

ETL@RACTEST> select a,rowid from liutest order by a desc nulls last;

A ROWID
---------- ------------------
2 AAF0+EAD0AAAGntAAB
1 AAF0+EAD0AAAGntAAA
AAF0+EAD0AAAGntAAC

Elapsed: 00:00:00.01


来自 http://blog.sina.com.cn/s/blog_6ff05a2c0100o424.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值