如何按特定订单排序

时间:2012-01-03 13:50:04

标签: sql postgresql sql-order-by

表用户:

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)

可以这样做,在这种情况下如何完成?

2 个答案:

答案 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)

Postgres 9.4或更高版本的通用解决方案

对于任意数量的值。只需使用您首选的排序顺序传递匹配类型的数组:

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

%modulo operator