← Все вопросы

Как отсортировать результат так, чтобы NULL были в самом конце?

Задан 8 месяцев назад572 просмотров3 ответа
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 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект