Я пытаюсь понять ORDER BY с CASE WHEN .
Моя цель - понять это фундаментально, потому что у меня были созданы разные варианты использования
Моя базовая таблица выглядит следующим образом
| Name |
|--------|
| BPM |
| BXR |
| Others |
| XZA |
| XYZ |
| PQR |
| ABC |
Запрос 1: Базовый ORDER BY
SELECT *
FROM City
ORDER BY Name
Результат 1: выдан правильный вывод, как показано ниже (столбец Имя отсортирован в порядке возрастания)
| Name |
|--------|
| ABC |
| BPM |
| BXR |
| Others |
| PQR |
| XYZ |
| XZA |
Запрос 2: я хочу Others
наконец
SELECT *
FROM City
ORDER BY CASE
WHEN Name = 'Others' THEN 1
ELSE 0
END
Результат запроса 2: Я получил частично правильный результат. Я получил Others
наконец, но другие names
Я ожидал, что это будет в порядке возрастания. Они на самом деле выглядят так, как они находятся в базовой таблице.
| Name |
|--------|
| BPM |
| BXR |
| XZA |
| XYZ |
| PQR |
| ABC |
| Others |
Я также не понимаю, что на самом деле означают 0
и 1
в ORDER BY
оператор.
Запрос 3: я хочу, наконец, BXR
и Others
.
SELECT *
FROM City
ORDER BY CASE
WHEN Name = 'BXR' THEN 1
WHEN Name = 'Others' THEN 2
ELSE 0
END
Результат запроса 3: Я получил частично правильный результат. Я получил 'Другие' и 'BXR 'наконец, но другие Name
не в алфавитном порядке. То же, что и в Query 2. Здесь также я не понимаю значение 0
, 1
, 2
| Name |
|--------|
| BPM |
| XZA |
| XYZ |
| PQR |
| ABC |
| BXR |
| Others |
Запрос 4: Я хочу Others
и PQR
сверху.
SELECT *
FROM City
ORDER BY CASE
WHEN Name = 'PQR' THEN 0
WHEN Name = 'Others' THEN 1
ELSE 2
END
Запрос 4 Результат: Я получаю PQR
и Others
сверху, но остальные имена не в алфавитном порядке.
| Name |
|--------|
| PQR |
| Others |
| BPM |
| BXR |
| XZA |
| XYZ |
| ABC |
Мое предположение о 0
, 1
, 2
состоит в том, что они являются просто числами, решающими "порядок ", в котором должна быть запись.(Запись, имеющая 0, должна сохраняться первой, а если все остальные записи имеют 1, то должна быть отсортирована в алфавитном порядке) (Если есть «0», «1», «2», в записи с 0
должно быть сначала, запись с1
должен быть вторым, все остальные записи, имеющие 2
должны быть отсортированы в алфавитном порядке)
Исправьте меня, если я ошибаюсь с этим
SQLFiddle