select student_id
, case when class='X' then 1
when sport = 'Y' then 2
when club='Z' then 3
else 4
end as Ordr
from School
WHERE class='X' or sport = 'Y' or club='Z'
Order by ordr
Объяснение:
WHERE class='X' or sport = 'Y' or club='Z'
просто реализует желаемую фильтрацию.
Пользовательский порядок реализуется путем создания дополнительного столбца с именем ordr
и использовать его в предложении ORDER BY
. Этот столбец создается с помощью оператора case. Порядок написания этого важен, потому что выражение CASE оценивается как первое истинное условие, а если нет истинного условия, оно оценивается как часть ELSE.
Таким образом, все учащиеся, принимающие класс X, получат Ордр 1, независимо от вида спорта и клуба.
Если учащийся не посещает урок X, выражение попытается оценить, будет ли ученик заниматься спортом Y, и если это так, этот студент получит присваивает ордеру 2 независимо от других значений столбца.
Тогда, если учащийся не принимает ни класс X, ни вид спорта Y, выражение случая проверит, находится ли студент в клубе Z. Если это правда, он будет присвоил ордеру 3.
Наконец, если ученик не находится ни в классе X, не занимается спортом Y или в клубе Z, ему будет присвоено ордра 4.
ORDER BY
is ASCENDING
по значению degfault, значение 1 будет отображаться до 2 и т. д.
То, что этот алгоритм не делает, что вы можете сказать из приведенного выше объяснения, - это расставить приоритеты для ученика. на занятии класса X, спорт Y, клуб Z над кем-то, кто берет только класс X.