如何按两列对查询结果进行排序,其中一列最后为空值

How to order a query result by two columns with nulls last in one of the columns

我有以下table'client'

ID|name|filecount
---------------------- 
1  Jim  7
2  Jane null
3  Mike 18
4  Jeff 12
5  Ann  null
6  Helen 22

我想从此 table ordered by ID Desc 中获取所有行,其中 filecount 列中的空值排在最后。

所以在排序后我想得到以下顺序:

ID|name  |filecount 
---------------------- 
6  Helen 22
4  Jeff  12
3  Mike  18
1  Jim   7
5  Ann   null
2  Jane  null

我尝试了以下但它不起作用:

Select * from client order by id desc, (filecount > 0) nulls last

您可以先按 filecount 排序,仅区分 0 值和非 0 值,然后再按 ID:

select *
from client
order by case
        when filecount <> 0 then 0
        else 1
    end, ID desc

P.S.: 那些不是 nulls,那些是零。如果它们应该是 nulls,则更改此行:

when filecount <> 0 then 0

至:

when filecount is not null then 0

我会在这里使用 CASE 表达式:

SELECT *
FROM client
ORDER BY
    CASE WHEN filecount IS NOT NULL THEN 0 ELSE 1 END,
    ID DESC;

Demo