如果我有一个查询,例如:
select * from tbl where id in (10, 20, 9, 4);
返回的结果可能按以下顺序排列:
4、
9、
10、
20
但是如果想要维护传递到初始查询中的列表的顺序怎么办?你会如何处理这个问题?
最终,我在这里使用 Django 作为我的应用程序的 ORM,但我希望首先研究数据库级别的可行性。
任何想法都非常欢迎!
使用 CASE 不太方便移植,因为您必须提前知道所有值以及要排序的顺序。最简洁的方法是使用数组来存储值,并按数组中项目的索引进行排序。
我已将其发布到 Postgres片段库 http://wiki.postgresql.org/wiki/Array_Index一会儿回来。
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;
选择 *
来自富
ORDER BY idx(array['新生','大二','大三','大四'], foo.grade_level)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)