如果我有查询,例如:
select * from tbl where id in (10, 20, 9, 4);
返回的结果可能按以下顺序排列: 4, 9, 10, 20
但是如果要维护传递给初始查询的列表的顺序呢?你会怎么做到这一点?
最终我在这里使用Django作为我的应用程序的ORM,但我希望首先调查db级别的可行性。
欢迎任何想法!
答案 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以了解如何创建数组并使用它来对函数进行排序。效果很棒!