1. 程式人生 > >2.05 處理排序空值

2.05 處理排序空值

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 處理排序空值