Учебник

Оглавление

Сортировка результата

Строки в результате запроса по умолчанию не упроядочены. Чтобы их вывести в определённом порядке, используем фразу ORDER BY. После неё через запятую перечислим выражения, в соответствии с которыми надо отсортировать результат. Например, список самолётов по наименованию модели:

SELECT *
FROM bookings.aircrafts
ORDER BY model

или по коду:

SELECT *
FROM bookings.aircrafts
ORDER BY aircraft_code

Давайте сначала выведем те самолёты, у которых дальность менее 6000 км. Выражение (range > 6000) возвращает ИСТИНА или ЛОЖЬ. При сортировке сначала выведутся строки, у которых это выражение ложно, а после них - истинно:

SELECT *
FROM bookings.aircrafts
ORDER BY (range > 6000)

Среди самолётов с дальностью до 6000 и более 6000 сделаем сортировку по модели. То есть, сначала отсортируем по признаку до 6000 км или дальше может летать самолёт, а затем по модели:

SELECT *
FROM bookings.aircrafts
ORDER BY
  (range > 6000),
  model

Чтобы изменить порядок сортировки после выражения ставится слово DESC:

SELECT *
FROM bookings.aircrafts
ORDER BY
  (range > 6000) DESC,
  model

выведет сначала самолёты с дальностью более 6000 км.

SELECT *
FROM bookings.aircrafts
ORDER BY
  (range > 6000),
  model DESC

отсортирует модели в обратном порядке. Можно использовать DESC в обоих выражениях:

SELECT *
FROM bookings.aircrafts
ORDER BY
  (range > 6000) DESC,
  model DESC

Фраза ORDER BY ставится после фраз WHERE и GROUP BY:

SELECT *
FROM bookings.aircrafts
WHERE range > 2000
ORDER BY aircraft_code

Давайте упорядочим результаты запроса из предыдущего занятия. Сначала по коду самолёта, затем среди одинаковых самолётов - по номеру рейса в обратном порядке, а среди одинаковых рейсов - по дате вылета:

WITH
  tickets_count AS
    (
      SELECT
        ticket_flights.flight_id,
        count(*) "Билетов"
      FROM
        bookings.ticket_flights
      GROUP BY
        ticket_flights.flight_id
    )
SELECT
  flights.flight_id,
  flights.flight_no,
  flights.scheduled_departure,
  flights.aircraft_code,
  tickets_count."Билетов"
FROM
  bookings.flights
  LEFT JOIN tickets_count
      ON tickets_count.flight_id=flights.flight_id
WHERE
  departure_airport='ROV'
ORDER BY
  aircraft_code,
  flight_no DESC,
  scheduled_departure