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

时间:2017-10-13 18:44:43

标签: postgresql sorting sql-order-by

(抱歉我的英语不好)

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

2 个答案:

答案 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;所以其余行正确排序。