如何按两列之一排序查询结果,最后一列为空

时间:2020-08-27 04:15:24

标签: sql postgresql sql-order-by case

我有下表'client'

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

我想从该表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

2 个答案:

答案 0 :(得分:2)

我将在此处使用CASE表达式:

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

screen capture from demo link below

Demo

答案 1 :(得分:1)

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

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

P.S .:不是null,而是零。如果它们应为null,则更改此行:

when filecount <> 0 then 0

收件人:

when filecount is not null then 0