Предложение ORDER BY

Использование оператора CASE в предложении ORDER BY позволяет выполнить более сложную сортировку, чем та, которая допускается при использовании сортировки по набору столбцов. При сортировке по столбцу ram можно выполнить ее по возрастанию или по убыванию. Если же мы хотим вывести сначала средние модели, то есть те, которые отвечают W98, потом высшие (W2k), а уже потом низшие (W95), то можно поступить так:

SELECT *
FROM PC
ORDER BY CASE
WHEN ram <= 32
THEN '3-W95'
WHEN ram <= 64
THEN '1-W98'
ELSE '2-W2k'
END;
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Цифры перед названием ОС проставлены в соответствии с желательным порядком сортировки. В противном случае, упорядочение текстовых значений по возрастанию будет следующим: W2k, W95, W98. Вот результат вышеприведенного запроса (заголовок столбца сортировки выделен прописными буквами):

codemodelspeedRAMhdcdprice
3123350064512x600
1123250064512x600
8123245064824x350
211217501281440x850
411216001281440x850
51121600128840x850
612337501282050x950
1112339001284040x980
1212338001282050x970
71232500321012x400
91232450321024x350
101260500321012x350

Есть еще более интересная возможность сортировки, а именно, сортировать по разным столбцам в зависимости от значения в некотором поле. Пусть, например, в группе W95 мы хотим выполнить сортировку по столбцу speed, в группе W98 — по столбцу hd, в группе W2k — по столбцу price. То есть в каждой группе, характеризуемой ОС описанными выше критериями, нам нужно выполнить сортировку по разным столбцам. Эту, на первый взгляд непростую задачу, решает простой запрос с оператором CASE в предложении ORDER BY:

SELECT *
FROM PC
ORDER BY ram,
CASE
WHEN ram <= 32
THEN speed
WHEN ram <= 64
THEN hd
ELSE price
END;
🚫
[[ error ]]
[[ column ]]
[[ value ]]

Вот результат этого запроса:

codemodelspeedramhdcdprice
91232450321024x350
101260500321012x350
71232500321012x400
1123250064512x600
3123350064512x600
8123245064824x350
211217501281440x850
411216001281440x850
51121600128840x850
612337501282050x950
1212338001282050x970
1112339001284040x980

Рекомендуемые упражнения: 65