Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Сортировка в запросе по массиву


Автор: polin11 1.5.2020, 22:31
Есть массив значений [4,6,5,1] некоторого поля.
Код

Получаем записи со значениями из этого массива.
select *
from T
where Filed1=ANY(ARRAY[4,6,5,1])


Вопрос:
Нужно чтобы записи были в том порядке в котором значения в массиве, то есть
Запись1 со значением 4
Запись2 со значением 6
Запись3 со значение 5
Запись4 со значением 1

Можно использовать UNION c каждым значением по отдельности
Код

select *
from T
where Filed1=4
....
union
select *
from T
where Filed1=1



Вопрос:
Можно ли добиться такой сортировки без использования UNION(UNION ALL), может быть ORDER BY

Автор: Akina 1.5.2020, 22:56
Ну Вы бы хоть СУБД указали, что ли...

Автор: polin11 1.5.2020, 23:17
СУБД Postgresql

Автор: ksnk 1.5.2020, 23:29
Код

select *
from T
where Filed1=ANY(ARRAY[4,6,5,1])
  ORDER BY
  CASE
    WHEN Filed1=4 THEN 1
    WHEN Filed1=6 THEN 2
    WHEN Filed1=5 THEN 3
    WHEN Filed1=1 THEN 4
    ELSE 5
  END;

?

Автор: Akina 2.5.2020, 21:36
unnest массива с нумерацией записей, и сортировка по этому номеру.

Код

SELECT test.value
FROM test
JOIN UNNEST(ARRAY[4,6,5,1]) WITH ORDINALITY criteria (field1, rownumber) ON test.field1 = criteria.field1
ORDER BY criteria.rownumber;


https://dbfiddle.uk/?rdbms=postgres_12&fiddle=3d5e08cd5b31093efd520be344ac5e7b

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)