Что такое ASC и DESC в SQL и как они влияют на сортировку
Что проверяют
Базовое знание синтаксиса и, что важнее, понимание, откуда вообще берётся порядок строк. Для аналитика это вопрос про достоверность выгрузки: один и тот же запрос без явной сортировки способен вернуть строки в разном порядке, и два отчёта начнут расходиться.
Как отвечать
ASC это по возрастанию, DESC по убыванию, оба указываются в ORDER BY после выражения сортировки. ASC подразумевается по умолчанию, писать его стоит только ради читаемости.
Ключевая деталь: направление действует на одно выражение, а не на весь список.
select client, amount
from orders
order by client asc, amount desc, id asc;Клиенты идут по алфавиту, внутри клиента суммы по убыванию, а id добавлен как разрыв ничьих: без него строки с одинаковыми клиентом и суммой могут меняться местами между запусками, и постраничная выгрузка начнёт терять одни строки и дублировать другие.
Отдельно скажите про пустые значения. В разных СУБД они по умолчанию оказываются либо в начале, либо в конце, поэтому если порядок важен, его задают явно через NULLS FIRST или NULLS LAST там, где это поддерживается, а где нет, добавляют первым ключом сортировки выражение, отделяющее пустые значения.
Где спотыкаются
Пишут order by a, b desc и считают, что убывание применилось к обоим полям. Первое поле молча сортируется по возрастанию, а расхождение замечают уже в готовом отчёте.
Сортируют текстовую колонку, в которой лежат числа, и получают порядок, где сотня стоит раньше девятки. Лечится приведением типа в выражении сортировки или исправлением типа самой колонки.
Забывают, что порядок строк зависит от правил сравнения: регистр, буква ё, взаимный порядок латиницы и кириллицы определяются настройкой базы, а не здравым смыслом. Если выгрузку потом сравнивают с сортировкой в другом инструменте, порядок надо проверять, а не предполагать.