Как отсортировать столбец ENUM в базе данных MySQL?

У меня есть столбец color в таблице MySQL, тип которого ENUM('RED', 'YELLOW', 'MY_COLOR', 'BLACK'), а другой столбец name, который имеет тип VARCHAR(30).

Я хотел бы получить все строки таблицы в следующем порядке:

  • YELLOW строки, отсортированные по name
  • RED строки последние, отсортированные по name
  • В середине все остальные строки, отсортированные по name

Можно ли сделать такой вид в 1 запросе?

Ответы

Ответ 1

Использование:

ORDER BY CASE color
           WHEN 'YELLOW' THEN 1
           WHEN 'RED' THEN 3
           ELSE 2
         END, name 

Ответ 2

Это отлично работает с mysql. Но для h2 DB это приводит к ошибке Причина: org.h2.jdbc.JdbcSQLException: упорядочить по выражению "CASEWHEN ((цвет =" ЖЕЛТЫЙ "), 1, CASEWHEN ((цвет =" RED "), 3))" должно быть в списке результатов в этом случае; Оператор SQL:

Чтобы избежать ошибки, добавьте stmt "CASEWHEN ((цвет =" ЖЕЛТЫЙ "), 1, CASEWHEN ((цвет =" RED "), 3))" в предложении select.