PostgreSQL NULLS LAST: переместить NULL в конец

Категория: Postgresql · Язык: SQL · Обновлено:

В PostgreSQL при сортировке DESC значения NULL по умолчанию идут первыми. Добавьте NULLS LAST, чтобы сначала показать заполненные даты, а строки без даты перенести вниз. Это полезно для списков задач, событий и записей с необязательным сроком.

Сначала заполненные даты

SQL
SELECT id, title, due_at
FROM tasks
ORDER BY due_at DESC NULLS LAST, id DESC;

NULLS LAST относится только к выражению due_at. Второй ключ id DESC задаёт стабильный порядок строк с одинаковым сроком, включая несколько NULL. Если нужны пустые даты наверху, замените модификатор на NULLS FIRST.

Важно про сортировку

Без явного ORDER BY база не гарантирует порядок строк. Для ASC PostgreSQL и так ставит NULL в конец, но явный NULLS LAST помогает зафиксировать ожидаемое поведение и не зависеть от смены направления сортировки.

Официальная справка: PostgreSQL — Sorting Rows.