ORDER BY: сортируем результат
Порядок строк: ORDER BY
Важная деталь, которая удивляет новичков: без явной сортировки порядок строк в ответе не гарантирован. База может вернуть их в любом порядке — как ей удобнее. Если порядок важен (а он почти всегда важен), его задают разделом ORDER BY:
SELECT model, speed
FROM airplanes
ORDER BY speed;
Этот запрос отсортирует самолёты по скорости — от меньшей к большей.
По возрастанию и убыванию: ASC / DESC
ASC(ascending) — по возрастанию. Это вариант по умолчанию, его можно не писать.DESC(descending) — по убыванию.
SELECT model, speed
FROM airplanes
ORDER BY speed DESC; -- сначала самые быстрые
Сортировка по нескольким столбцам
Можно сортировать сразу по нескольким столбцам — через запятую. База сначала упорядочит по первому, а строки с одинаковым значением — по второму, и так далее:
SELECT airport_code, city, country
FROM airports
ORDER BY country, city; -- по стране, внутри страны — по городу
Типичные ошибки
- Надежда на порядок «по умолчанию». Без
ORDER BYпорядок строк не гарантирован. Сегодня самолёты пришли по коду, а завтра, после обновления данных, — вперемешку. - DESC действует только на свой столбец. В
ORDER BY range, speed DESCпо убыванию идёт толькоspeed, аrange— по возрастанию. - Числа, сохранённые текстом. Если число хранится как текст, сортировка идёт по буквам:
'10'окажется раньше'9', потому что символ 1 меньше символа 9. - Пустые значения. При сортировке по возрастанию PostgreSQL ставит
NULLв конец, по убыванию — в начало. Изменить это можно явно:ORDER BY actual_departure NULLS LAST.
Сортировать можно и по псевдониму из SELECT: SELECT speed AS kmh FROM airplanes ORDER BY kmh. Это работает, потому что ORDER BY выполняется после SELECT.
💡 Хитрость профи: если по основному столбцу есть одинаковые значения, добавьте в конец сортировки уникальный столбец (например,airplane_codeилиairport_code) — тогда порядок будет полностью однозначным каждый раз. В наших задачах так и делаем.
Например, у двух самолётов скорость 913 км/ч. Чтобы они всегда шли в одном и том же порядке, пишем ORDER BY speed DESC, airplane_code.
Практика
8- Тест 1 — Как будут упорядочены строки, если в запросе нет ORDER BY?
- Тест 2 — Нужно: сначала самые дальнобойные самолёты, а при равной дальности — меньший код. Какой вариант верный?
- Задача 1 — Самолёты от быстрых к медленным
- Задача 2 — Самолёты по дальности
- Задача 3 — Самолёты по названию модели
- Задача 4 — Аэропорты по стране и городу
- Задача 5 — Аэропорты в обратном порядке
- Задача 6 — Сортировка по двум критериям
Задачи решаются прямо здесь, в браузере, на учебной базе — нужна только бесплатная регистрация, чтобы сохранялись ответы и прогресс.
Потренируйтесь в тренажёре
2Задачи на ту же тему, но на другой базе — продажи магазина электроники. Хороший способ проверить, что тема понятна, а не просто запомнилась на примерах урока.