(1,2,3,4,5,6)
Выводит элементы 1.2.3.4.6.5. Подскажите как отсортировать в порядке указаном в функции IN?
IN не гарантирует сортировку. Можно сделать JOIN на набор этих значений, к которым приклеен sequence от 1 до N и сделать ORDER BY по sequence.
ORDER BY case id when 1 then 1 when 2 then 3 when 3 then 2 when 4 then 4 .... else null end
если будет указано не 6 пунктов, а 126. Как это повлияет на скорость?
А что смешного?
Он его в IN указывает, АЛЛО!
Впрочем, ты можешь и смеяться, смех — позитивная, положительная эмоция.
Спасибо. Попробую
Ещё можно конечно если совсем лень генерировать CASE в ORDER BY , создать специальную таблицу- справочник с идентификатором в ключе и порядком сортировки в атрибуте, и делать JOIN на неё, и сортировать по этому порядку.
array_position(array[1,2,3,4,5,6], id)
Примерно всё!
Я выше написал...
Спасибо. Сработало. Изменил на bigint array_position(array[1, 2, 3]::bigint[], c.id::bigint) Postgres 12
@b360124 Богдан, в этом треде обсуждали. Из предложенного: сделать специальную таблицу-справочник с порядком атрибутов в сортировки и делать через Join. Или генерировать этот порядок через сиквенс.
спасибо, простого решения нет
А разве значения в этом IN — константа? Если нет, то стоит использовать параметризацию, а там как раз будет параметр-массив, и можно сделать так, как показал @vyegorov .
Обсуждают сегодня