所以我有用户表:
id name product
1 second NULL
2 first 27
3 first 27
4 last 6
5 second NULL
我想按照此产品订单订购它们:[27,NULL, 6]
所以我会得到:
id name product
2 first 27
3 first 27
1 second NULL
5 second NULL
4 last 6
(通知user id 3
可以在user id 2
之前,因为它们都具有相同的产品价值)
现在没有NULL,我可以这样做:
SELECT id FROM users ORDER BY users.product=27, users.product=6;
我怎么能用NULL做?
P.S。 我想为许多记录这样做,所以它应该是有效的。
答案 0 :(得分:2)
您可以使用case
生成自定义排序顺序:
select id
from users
order by case
when product = 27
then 1
when product is null
then 2
when product = 6
then 3
end
答案 1 :(得分:1)
作为备注,您可以遵循原始方法。您只需要NULL
- 安全比较:
SELECT id
FROM users
ORDER BY (NOT users.product IS DISTINCT FROM 27)::int DESC,
(user.product IS NULL)::int DESC,
(NOT users.product IS DISTINCT FROM 6)::int DESC;
您的版本有意外结果的原因是因为第一次比较可以返回NULL
,它与“true”和“false”分开订购。