Учебно-практическое пособие москва 2017 ббк


SELECT dw.name_of_day, count( * ) AS num_flights



Pdf көрінісі
бет150/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   146   147   148   149   150   151   152   153   ...   243
Байланысты:
Язык SQL. Базовый курс

SELECT dw.name_of_day, count( * ) AS num_flights
FROM (
SELECT unnest( days_of_week ) AS num_of_day
FROM routes
WHERE departure_city = 'Москва'
) AS r,
unnest( '{ 1, 2, 3, 4, 5, 6, 7 }'::integer[],
'{ "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Сб.", "Вс."}'::text[]
) AS dw( num_of_day, name_of_day )
WHERE
r.num_of_day = dw.num_of_day
GROUP BY r.num_of_day, dw.name_of_day
ORDER BY r.num_of_day;
Этот запрос можно упростить, воспользовавшись предложением WITH
ORDINALITY. Оно позволяет в нашем примере избавиться от массива це-
лых чисел, обозначающих дни недели, поскольку автоматически формируется
153


столбец целых чисел, нумерующих строки результирующего набора. По умол-
чанию этот столбец называется ordinality. Это имя можно использовать в
запросе.
Самостоятельно модифицируйте запрос с применением предложения WITH
ORDINALITY.
13. Ответить на вопрос о том, каковы максимальные и минимальные цены билетов
на все направления, может такой запрос:
SELECT f.departure_city, f.arrival_city,
max( tf.amount ), min( tf.amount )
FROM flights_v f
JOIN ticket_flights tf ON f.flight_id = tf.flight_id
GROUP BY 1, 2
ORDER BY 1, 2;
departure_city
|
arrival_city
|
max
|
min
---------------------+---------------------+-----------+----------
Абакан
| Москва
| 101000.00 | 33700.00
Абакан
| Новосибирск
|
5800.00 | 5800.00
Абакан
| Томск
|
4900.00 | 4900.00
Анадырь
| Москва
| 185300.00 | 61800.00
Анадырь
| Хабаровск
| 92200.00 | 30700.00
...
Якутск
| Мирный
|
8900.00 | 8100.00
Якутск
| Санкт-Петербург
| 145300.00 | 48400.00
(367 строк)
А как выявить те направления, на которые не было продано ни одного билета?
Один из вариантов решения такой: если на рейсы, отправляющиеся по какому-
то направлению, не было продано ни одного билета, то максимальная и мини-
мальная цены будут равны NULL. Нужно получить выборку в таком виде:
departure_city
|
arrival_city
|
max
|
min
---------------------+---------------------+-----------+----------
Абакан
| Архангельск
|
|
Абакан
| Грозный
|
|
Абакан
| Кызыл
|
|
Абакан
| Москва
| 101000.00 | 33700.00
Абакан
| Новосибирск
|
5800.00 | 5800.00
...
Модифицируйте запрос, приведенный выше.
14. Предположим, что маркетологи нашей авиакомпании хотят знать, как часто
встречаются различные имена среди пассажиров? Получить распределение ча-
стот имен пассажиров в таблице «Билеты» (tickets) поможет такой запрос:


Достарыңызбен бөлісу:
1   ...   146   147   148   149   150   151   152   153   ...   243




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет