Postgres子查询,按子查询排序

时间:2010-03-09 12:30:23

标签: postgresql

如果我有查询,例如:

select * from tbl where id in (10, 20, 9, 4);

返回的结果可能按以下顺序排列: 4, 9, 10, 20

但是如果要维护传递给初始查询的列表的顺序呢?你会怎么做到这一点?

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

欢迎任何想法!

3 个答案:

答案 0 :(得分:4)

使用CASE不是非常便携,因为您必须提前知道所有值和要排序的顺序。最干净的方法是使用数组作为值,并按数组中项目的索引进行排序。

前一段时间我把它发布到Postgres Snippet Library

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;

SELECT * 来自foo ORDER BY idx(array ['Freshman','Sophomore','Junior','Senior'],foo.grade_level)

答案 1 :(得分:0)

然后,您可能希望在 ORDER BY 语句中使用CASE

答案 2 :(得分:0)

查看this topic以了解如何创建数组并使用它来对函数进行排序。效果很棒!

相关问题