Как упорядочить данные SQL в произвольном формате, а не в алфавитном порядке - PullRequest
0 голосов
/ 13 октября 2018

Пожалуйста, я хотел бы знать, возможно ли в SQL упорядочить результаты запроса в формате, отличном от стандартного алфавитно-цифрового порядка столбцов.Например, рассмотрим таблицу «Таблица»,

Пример таблицы

Следующий скрипт упорядочит таблицу в алфавитном порядке относительно столбца «Цвет»:

SELECT * FROM Table ORDER BY Color;

Как я могу заказать его так, чтобы цвет заказа был ЗЕЛЕНЫЙ, СИНИЙ, КРАСНЫЙ?То есть, как я могу заказать с моим определенным форматом заказа?

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

При использовании MySQL:

ORDER BY FIELD(Color,'GREEN','BLUE,'RED') ASC

Документация: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_field

Обратите внимание на тот факт, что FIELD (..) будет иметь значение 0, если значение первого аргумента равновообще отсутствует в последующих аргументах или когда он равен NULL.Так что, если какой-либо из этих случаев относится к возможностям, вам нужно проявить особую осторожность, иначе это будут лучшие результаты.Поэтому в таких случаях я лично предоставляю желаемый заказ в обратном порядке и использую DESC, например, в вашем случае:

ORDER BY FIELD(Color,'RED','BLUE,'GREEN') DESC
0 голосов
/ 13 октября 2018

Заказ по FIELD, вероятно, является лучшим немедленным ответом для вашей ситуации в MySQL.Но возможным хорошим долгосрочным решением было бы добавить еще одну таблицу, которая поддерживает порядок сортировки по цвету, например TableColor:

Color | Position
GREEN | 1
BLUE  | 2
RED   | 3

Тогда вам нужно будет только присоединить эту таблицу к вашей текущей таблице, чтобыуметь использовать его для заказа:

SELECT t1.*
FROM yourTable t1
INNER JOIN TableColor t2
    ON t1.Color = t2.Color
ORDER BY
    t2.Position;

Преимущество этого подхода в том, что он хорошо масштабируется, если в итоге вы скажете десятки разных цветов.В этом случае выражение FIELD или, что еще хуже, выражение CASE не будет хорошо масштабироваться и его будет сложно поддерживать.

0 голосов
/ 13 октября 2018

Вы можете использовать CASE:

SELECT * 
FROM Table 
ORDER BY CASE Color WHEN 'GREEN' THEN 1 WHEN 'BLUE' THEN 2 ELSE 3 END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...