Как отсортировать по списку id в postgresql?

Здравствуйте. пытаюсь понять как отсортировать вот такой запрос:
select id, text from mytable where id in (5,13,2,1,6,10);


отсортировать нужно в том же порядке, что и в списке id, т е 5,13,2,1,6,10

Нашел вот такой вариант:
select id, text from mytable where id in (5,1,13,10) order by id=5 DESC, id=1 DESC, id=13 DESC, id=10 DESC;

но если у меня в in 20-30 значений, то получится очень большая портянка.

Вопрос номер 2: насколько оптимален такой запрос при большом списке id? при каком размере списка мне следует изменить запрос, вычислять строки как то по другому?
  • Вопрос задан
  • 963 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
select id, text from mytable where id in (5,13,2,1,6,10) order by idx(array[5,13,2,1,6,10], id);

С PostgreSQL 9.4 можно ещё так:
select mt.id, mt.text from mytable as mt
join unnest('{5,13,2,1,6,10}'::int[]) with ordinality as t(id, ord) using (id)
order by t.ord;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ZhukovAN
Создать рядом таблицу с двумя столбцами- id и order. Запрос сделать связным, результаты сортировать по значениям order вспомогательной таблицы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы