处理排序空值—sqlCookbook

来源:互联网 发布:淘宝客报名入口 编辑:程序博客网 时间:2024/05/07 06:02

首先我会想到用下面的语句

select ename,sal,comm from emp order by 3 或 select ename,sal,comm from emp order by 3 desc

结果如下:

                   ASC                                                                        DESC

                                                                                                                   

但这样的结果并不是我们想要的,我们要的是comm列中非null值的记录的排序不受comm为null的记录的影响。在Mysql中我们可以使用case表达式来标记一个值是否为null。在order by 中增加标记列就能控制null值记录的排序了。

第一情况—NULL值在前,非NULL值自行排序

 select ename,sal,comm

 from (select ename,sal,comm,

                         case when comm is null then 0 else 1 end as is_null

               from emp) x

  order by is_null ,comm desc;

                                                                       

第二种情况—  NULL值在后,非NULL值自行排序           

 select ename,sal,comm

 from (select ename,sal,comm,

                         case when comm is null then 0 else 1 end as is_null

               from emp) x

  order by is_null desc,comm ;


                                                                                 

在上面的SQL语句中,标记列is_null,如果以ASC方式排序的话,comm列的NULL值的记录排在前面;如果以DESC方式排序的话,comm列的NULL值的记录排在后面。



0 0
原创粉丝点击