Postgresql Postgres子查询,按子查询排序

Postgresql Postgres子查询,按子查询排序,postgresql,Postgresql,如果我有以下问题: select * from tbl where id in (10, 20, 9, 4); 返回的结果可能按以下顺序排列: 4. 9, 10, 二十 但是,如果您希望维护传递到初始查询中的列表的顺序,该怎么办?你将如何处理这个问题 最终,我在这里使用Django作为我的应用程序的ORM,但我希望首先调查在db级别什么是可行的 欢迎任何意见 然后,您可能想看看如何在ORDER BY语句中使用数组看看如何创建数组并使用它在函数中排序。很好 用例的可移植性不强,因为您必须提前知道

如果我有以下问题:

select * from tbl where id in (10, 20, 9, 4);
返回的结果可能按以下顺序排列: 4. 9, 10, 二十

但是,如果您希望维护传递到初始查询中的列表的顺序,该怎么办?你将如何处理这个问题

最终,我在这里使用Django作为我的应用程序的ORM,但我希望首先调查在db级别什么是可行的


欢迎任何意见

然后,您可能想看看如何在ORDER BY语句中使用数组

看看如何创建数组并使用它在函数中排序。很好

用例的可移植性不强,因为您必须提前知道所有的值以及要排序的顺序。最干净的方法是使用数组作为值,并按数组中项的索引进行排序

不久前我已经把这篇文章发到博士后了

CREATE OR REPLACE FUNCTION idx(anyarray, anyelement)
  RETURNS int AS 
$$
  SELECT i FROM (
     SELECT generate_series(array_lower($1,1),array_upper($1,1))
  ) g(i)
  WHERE $1[i] = $2
  LIMIT 1;
$$ LANGUAGE sql IMMUTABLE;
挑选* 来自富 按idx排序(数组[‘大一’、‘大二’、‘大三’、‘大四’],foo.grade_level)