(抱歉我的英语不好)
我有一组用户ID,如下所示:
[5, 9, 3, 22, 16]
显然,这些值是动态的。
现在,我需要SELECT
所有用户,但具有上述ID的用户是第一位的。
到目前为止我尝试了什么?
这个查询给出了确切的答案:
SELECT * FROM users WHERE id IN (5, 9, 3, 22, 16)
UNION ALL
SELECT * FROM users WHERE id NOT IN (5, 9, 3, 22, 16);
但还有更好的方法吗?
P.S:
我正在使用PostgreSQL 10。
答案 0 :(得分:2)
试试这个:
select *
from users
order by id not in (5, 9, 3, 22, 16), id
如the documentation,中所述,ORDER BY子句中使用的表达式
可以是由输入列值组成的任意表达式。
特别是,您可以使用布尔表达式,因为此类型的值是可排序的。请注意false < true
。
答案 1 :(得分:0)
您可以在ORDER BY上使用CASE语句,我将举例说明:
select *
from users
order by
CASE WHEN id=5 THEN 1
WHEN id=9 THEN 2
WHEN id=3 THEN 3
WHEN id=22 THEN 4
WHEN id=16 THEN 5
END, id
使用CASE,您可以告诉postgres&#34; priority&#34;如果您事先了解每个ID,或者您想要的价值。之后我添加了#34; id&#34;所以其余行正确排序。