Учебное пособие Санкт-Петербург «бхв-петербург»


SELECT 'Вторник' AS day_of_week, count( * ) AS num_flights



Pdf көрінісі
бет154/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   150   151   152   153   154   155   156   157   ...   256
sql osnovi yazika

SELECT 'Вторник' AS day_of_week, count( * ) AS num_flights
FROM routes
WHERE departure_city = 'Москва'
AND days_of_week @> '{ 2 }'::integer[];
day_of_week | num_flights
-------------+-------------
Вторник
|
134
(1 строка)
Нужно выполнить еще пять аналогичных команд, чтобы получить результаты
для всех дней недели. Очевидно, что это нерациональный способ.
Получить требуемый результат можно с помощью одного запроса:
SELECT unnest( days_of_week ) AS day_of_week,
count( * ) AS num_flights
FROM routes
WHERE departure_city = 'Москва'
GROUP BY day_of_week
ORDER BY day_of_week;
196


Контрольные вопросы и задания
day_of_week | num_flights
-------------+-------------
1 |
131
2 |
134
3 |
126
4 |
136
5 |
124
6 |
133
7 |
124
(7 строк)
Задание 1.
Самостоятельно разберитесь, как работает приведенный запрос.
Выясните, что делает функция unnest. Для того чтобы найти ее описание,
можно воспользоваться теми разделами документации, которые были указа-
ны в главе 4. Однако можно воспользоваться и предметным указателем (Index),
ссылка на который находится в самом низу оглавления документации.
В качестве вспомогательного запроса, проясняющего работу функции unnest,
можно выполнить следующий:
SELECT flight_no, unnest( days_of_week ) AS day_of_week
FROM routes
WHERE departure_city = 'Москва'
ORDER BY flight_no;
Задание 2.
Использование номеров дней недели в предыдущей выборке не
должно вызывать затруднений. Но все-таки предположим, что нас попросили
модифицировать запрос, чтобы результат выводился в таком виде:
name_of_day | num_flights
-------------+-------------
Пн.
|
131
Вт.
|
134
Ср.
|
126
Чт.
|
136
Пт.
|
124
Сб.
|
133
Вс.
|
124
(7 строк)
Покажем одно из возможных решений задачи. Оно основано на использовании
специальной табличной функции unnest в предложении FROM. Подробно об
этом написано в документации в разделе 7.2.1.4 «Табличные функции». Функ-
ция может принимать любое число параметров-массивов, а возвращает набор
197


Глава 6. Запросы
строк, которые могут использоваться в запросах как обычные таблицы. В этих
наборах строк столбцы формируются из значений, содержащихся в массивах.


Достарыңызбен бөлісу:
1   ...   150   151   152   153   154   155   156   157   ...   256




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

    Басты бет