表用户:
id | firstname | lastname
---+-----------+---------
1 | John | Smith
2 | Adam | Tensta
3 | Anna | Johansson
我想按照ID 2,3,1的顺序选择它们。仅由id-field指定。这可能吗?
我在想SELECT * FROM users ORDER BY id ORDER(2,3,1)
可以这样做,在这种情况下如何完成?
答案 0 :(得分:20)
应按顺序使用CASE:
SELECT *
FROM users
ORDER BY case id when 2 then 1
when 3 then 2
when 1 then 3
end
答案 1 :(得分:0)
对于任意数量的值。只需使用您首选的排序顺序传递匹配类型的数组:
SELECT u.*
FROM users u
LEFT JOIN unnest('{2,3,1}'::int[]) WITH ORDINALITY o(id, ord) USING (id)
ORDER BY o.ord;
这会排序不匹配的行,因为ord
为NULL然后按升序排序。
对于没有ORDINALITY
的旧版本,可以使用类似的解决方案。
相关:
SELECT * FROM users ORDER BY (id+1)%3