Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка в запросе по массиву 
:(
    Опции темы
polin11
Дата 1.5.2020, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



Есть массив значений [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
PM MAIL   Вверх
Akina
Дата 1.5.2020, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 453



Ну Вы бы хоть СУБД указали, что ли...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
polin11
Дата 1.5.2020, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 6.6.2015

Репутация: нет
Всего: нет



СУБД Postgresql
PM MAIL   Вверх
ksnk
Дата 1.5.2020, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: нет
Всего: 386



Код

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;

?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Akina
Дата 2.5.2020, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 453



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;


fiddle



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1322 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.