此问题在此处已有答案:
ORDER BY the IN value list(17个答案)
3天前关闭。
如何让查询结果按照WHERE
子句中传递的项的确切顺序进行排序?
例如,使用以下查询:
SELECT id, name FROM my_table
WHERE id in (1,3,5,2,4,6)
ORDER BY id
结果:
id | name
---------
1 | a
2 | b
3 | c
4 | d
5 | e
6 | f
我所期望的:
id | name
---------
1 | a
3 | c
5 | e
2 | b
4 | d
6 | f
我注意到MySQL中有一个FIELD()
函数。PostgreSQL中有等价的函数吗?
2条答案
按热度按时间5ssjco0h1#
传递一个数组并使用
WITH ORDINALITY
。这是最干净和最快的:假设所传递数组中的值是不同的。否则,这个解决方案保留重复值,而
IN
删除它们。您必须定义您想要的行为。但是所需的排序顺序也是不明确的,这将使这个问题变得没有意义。请参阅:
ljsrvy3e2#
@chris Kao,使用postgresql中的位置。
*方法:1 SELECT标识,名称 * FROM my_table WHERE标识在(1,3,5,2,4,6)中按位置排序(标识::文本在'1,3,5,2,4,6'中)输出:
方法:二