У меня есть 1 таблица с идентификаторами столбцов, именем и угрозой, и я хочу использовать порядок по пунктам для столбцов угроз.
Угроза 1 имеет самый высокий приоритет, а 5 - самый низкий. Немногие записи не будут иметь оценку угрозы и иметь нулевое значение в качестве оценки.
Следовательно, при отображении его на экране вычитается оценка угрозы с числовым значением 6 (если угроза имеет значение), и то же самое будет использоваться в качестве оценки угрозы.
При сортировке угрозы столбца по asc, он выбирает первые нулевые значения (без угрозы) и сортирует по desc, выбирая первое значение как 5 (самая низкая угроза).
Следовательно, последний порядок на экране (после вычитания на 6) для ASC. Если вы видите здесь, оценка угрозы с 5, показанная как верхняя, потому что запись отправки SQL отсортирована по оценке угрозы.
+-------------+------------+
| screen data | Table data |
+-------------+------------+
| NULL | Null |
| 1 | 5 |
| 2 | 4 |
| 3 | 3 |
| 4 | 2 |
| 0 | 0 |
+-------------+------------+
Уже пробовал ORDER BY threat * -1 ASC
, но выдает ошибку
Ошибка BigInt без знака вне диапазона
Здесь мое требование - получить оценку угрозы с 1 в качестве верхней записи при сортировке записей, потому что NULL имеет прецеденты над ней.
Ожидаемое поведение для сортировки (ASC или desc)
+--------+
| Threat |
+--------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 0 |
| NULL |
+--------+
- рабочий раствор -
С помощью замечательных людей, приведенное ниже решение работает как шарм.
ORDER BY IF (threat=0,6, ifnull(threat,6)) ASC ;