包含空值的SQL排序

时间:2016-04-15 07:18:31

标签: mysql sql sql-server sorting

我尝试了以下查询以与表中的NULL条目一起排序。我需要使用book_id对book_name进行排序。

升序:

SELECT book_id 
FROM   books 
GROUP  BY book_id 
ORDER  BY CASE 
            WHEN book_id IS NULL THEN 1 
            ELSE 0 
          END, 
          book_id; 

 1 
 2 
 NULL

预期结果:

升序:

1
2
NULL

降序:

SELECT book_id 
FROM   books 
GROUP  BY book_id 
ORDER  BY CASE 
            WHEN book_id IS NULL THEN 1 
            ELSE 0 
          END DESC, 
          book_id; 




 NULL
 1 
 2 

预期结果:

降序:

NULL
2
1

4 个答案:

答案 0 :(得分:0)

您还可以将DESC排序方向应用于第二个排序列:

SELECT book_id 
FROM   books 
GROUP  BY book_id 
ORDER  BY CASE WHEN book_id IS NULL 
             THEN 1 
             ELSE 0 
          END DESC, 
          book_id DESC; --- !!!

如果省略,则默认为ASC

答案 1 :(得分:0)

只需将空值设置为-1,然后根据该值进行排序。例如

 SELECT book_id 
FROM   books 
GROUP  BY book_id 
ORDER  BY isnull(book_id,-1) ASC; 

答案 2 :(得分:0)

ASC:

SELECT book_id 
FROM   books
order by book_id , COALESCE(book_id,0);

DESC:

SELECT book_id 
FROM   books
order by book_id desc , COALESCE(book_id,0) desc;

答案 3 :(得分:0)

您还可以使用以下查询 -

升序

SELECT book_id 
FROM   books 
GROUP  BY book_id 
ORDER  BY IF(book_id IS NULL,1,0), book_id;

降序

SELECT book_id 
FROM   books 
GROUP  BY book_id 
ORDER  BY IF(book_id IS NULL,0,1), book_id DESC;