如何按列排序但数组排在第一位

How to Order By a column but array come first

(抱歉我的英语不好)

我有一组用户 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。

试试这个:

select *
from users
order by id not in (5, 9, 3, 22, 16), id

the documentation, 中所述,在 ORDER BY 子句中使用的表达式

can be an arbitrary expression formed from input-column values.

特别是,您可以使用布尔表达式,因为这种类型的值是可排序的。请注意 false < true.

您可以在 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 "priority" 或你想要的每个 id 的值,如果你事先知道它们的话。之后,我添加了 "id" 以便其余行得到正确排序。