← Все вопросы
Как отсортировать результат так, чтобы NULL были в самом конце?
13
Сортирую заказы по дате доставки ORDER BY delivered_at, но у части строк она NULL (ещё не доставлено), и эти NULL вылезают наверх. Хочу, чтобы непустые шли первыми, а NULL — в хвосте. Как?
3 ответа
22
✓ Принятый ответ — помог автору
В PostgreSQL есть прямой синтаксис:
SELECT * FROM orders
ORDER BY delivered_at NULLS LAST;
А в MySQL такого нет, поэтому делают трюк — сначала сортируют по «флагу пустоты»:
SELECT * FROM orders
ORDER BY (delivered_at IS NULL), delivered_at;
delivered_at IS NULL даёт 0 для непустых и 1 для NULL, значит NULL уезжают в конец, а внутри непустых работает обычная сортировка по дате.
Оксана Крылова в MySQL ещё помнить, что по умолчанию NULL идут ПЕРВЫМИ при ASC · 8 месяцев назад
6
NULLS LAST (Postgres/Oracle) или трюк ORDER BY col IS NULL, col (MySQL).
-3
Просто поставь DESC, и NULL уедут вниз.
noi rock неа, DESC просто перевернёт порядок; в MySQL при DESC NULL наоборот всплывут наверх · 8 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.