sql - IN() 子句中的 PostgreSQL ORDER BY 值

标签 sql postgresql sql-order-by sql-in

好的,这里有一些关于如何做到这一点的答案。但是所有的答案都假设查询是全选的。如果您有不同的选择,这些方法将不再有效。

请参阅此处了解该方法:Simulating MySQL's ORDER BY FIELD() in Postgresql

基本上我有

SELECT DISTINCT id 
FROM items 
WHERE id IN (5,2,9) 
ORDER BY
 CASE id
  WHEN 5 THEN 1 
  WHEN 2 THEN 2
  WHEN 9 THEN 3
 END

当然,这个断言

"PGError: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list"

有什么方法可以按照 IN 子句中值的顺序对 PostgreSQL 中的查询结果进行排序吗?

最佳答案

您可以将其包装到派生表中:

SELECT *
FROM (
  SELECT DISTINCT id 
  FROM items 
  WHERE id IN (5,2,9) 
) t
ORDER BY
 CASE id
  WHEN 5 THEN 1 
  WHEN 2 THEN 2
  WHEN 9 THEN 3
 END

关于sql - IN() 子句中的 PostgreSQL ORDER BY 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6822651/

相关文章:

postgresql - LEFT() 在 Postgres 中不起作用

c# - 通过 Entity Framework 连接的多方进行排序

mysql:顺序 ->限制 ->总和...可能吗?

sql - 如何使用 JOIN 查询从 Oracle 函数返回记录?

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

SQL TRY_CONVERT DateTime 与 DateTime2

postgresql - Postgres XLOG_SWITCH

sql - 如果 Column1 不为空,则按 Column1 排序,否则按 Column2 排序

sql - 如何更新间隔值增加的列?

sql - Flutter - SQLite 死锁只是在应用程序的第一次运行中