2.05 處理排序空值
阿新 • • 發佈:2017-09-14
rdb lec 可能 數據 解決 增加 不同 正是 表達
問題:在emp中根據comm排序結果。但是,這個字段可以有空值。需要指定是否將控制排在最後。
解決方案:根據數據的顯示方式,以及特定的rdbms排序空值的方式,可以按照升序或降序來對空值的列排序。
select ename,sal,comm from emp
order by 3
select ename,sal,comm from emp
order by 3 desc
這種解決方案中,如果可為空值的列包含非空值,那麽也可以根據要求,按升序或降序排序,這可能正是所期待的,也許不是。
如果希望空值的排序與非空值不同,例如,要以升序或降序方式來排序非空值,將空值放在最後,則可使用case表達式有條件的排序列。
使用case表達式來標記一個值是否為為NULL。這個標記有兩個值,一個表示NULL,一個表示非NULL。這樣,只要在order by子句中增加標記列,便可以很容易的控制空值是排在前面還是最後,而不會被非空值所幹擾。
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;
2.05 處理排序空值