Добрый день!
Встретил описание про MySQL
Сортировка записей по заданному списку значений
Очевидно, что, используя стандартный вариант сортировки (по алфавиту), расположить сезоны порядке «весна», «лето», «осень», «зима» не получится. Естественно, можно каждому времени года присвоить свой код, но есть и другой вариант решения – использовать функцию FIELD.
SELECT * FROM articles ORDER BY FIELD(a_season, "весна","лето","осень","зима")
Эта функция ищет значение, указанное в первом параметре, среди значений, перечисленных в остальных параметрах, и возвращает его порядковый номер. При выполнении запроса в первый параметр функции FIELD будут передаваться значения из поля a_season и, таким образом, записи будут отсортированы в заданном нами порядке.
Можно ли сделать такое в Postgres? Простой повтор кода выдает ошибку.
Вариантов несколько. Наиболее
Вариантов несколько.
Наиболее правильный: просто сортируйте по дате. Подойдёт?
Если нужно что-то такое, то можно создать справочник с порядком и делать join с целевой таблицей.
Или вот так:
Месяцы привел как пример - у
Месяцы привел как пример - у меня там другие слова. Названия подразделений, их надо выводить в определенном порядке, согласно "цветовой дифференциации штанов".
Нашел такое предложение, почти как у вас:
select *
from pet
order by species, case species when 'cat' then 1
when 'dog' then 2
when 'bird' then 3
else 0 end desc;
Но почему-то не работает, ошибки нет, но сортирует просто по алфавиту, данную колонку.
Нашел еще вариант работающий
ORDER BY ID=10 DESC, ID=2 DESC, ID=56 DESC, ID=40
т.к. сначала идет сортировка
т.к. сначала идет сортировка по species, а потом по case.
Ну и как вариант
ORDER BY position (col IN array_to_string(ARRAY['б', 'а'], ','))