Mysql 包含空值的SQL排序

Mysql 包含空值的SQL排序,mysql,sql,sql-server,sorting,Mysql,Sql,Sql Server,Sorting,我尝试了以下查询,以便与表中的空条目一起排序。我需要按书名和书号进行排序 对于升序: 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

我尝试了以下查询,以便与表中的空条目一起排序。我需要按书名和书号进行排序

对于升序:

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, 
          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
预期结果:

对于降序:

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

您还可以将
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,然后根据该值排序。比如说

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

描述:


您也可以使用以下查询-

用于升序

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;
用于下降

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;

当book_id为空时,按大小写排序,然后为1或0 end desc,book_id desc
按大小写保存一些键入内容
当book_id为空时,按大小写顺序保存,然后0或1结束,book_id desc
。是否同时查找MySQL和MS SQL Server的代码?(不要标记不直接涉及的产品…)是否为MySQL或MS SQL Server或两者的
isnull();这是不是把
NULL
值放在了底部?我错了,我以为我们是关于MSSql的,Felix ASC是正确的,在这个例子中使用你是对的,这将按升序对非NULL
图书id
进行排序。OP希望按降序对其进行排序,顶部为
NULL
值。