Ответ 1
Должно работать с CASE в порядке:
SELECT *
FROM users
ORDER BY case id when 2 then 1
when 3 then 2
when 1 then 3
end
Пользователи таблицы:
id | firstname | lastname
---+-----------+---------
1 | John | Smith
2 | Adam | Tensta
3 | Anna | Johansson
Я хочу выбрать их в порядке ID 2, 3, 1. ТОЛЬКО, заданное поле id. Возможно ли это?
Я думаю что-то вроде SELECT * FROM users ORDER BY id ORDER(2,3,1)
Можно ли это сделать, и в этом случае, как?
Должно работать с CASE в порядке:
SELECT *
FROM users
ORDER BY case id when 2 then 1
when 3 then 2
when 1 then 3
end
Для любого числа значений. Просто передайте массив соответствующего типа с предпочтительным порядком сортировки:
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.