如何按列排序但数组排在第一位
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" 以便其余行得到正确排序。
(抱歉我的英语不好)
我有一组用户 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" 以便其余行得到正确排序。