Синтаксис запроса, не понимаю как использовать WITH ORDINALITY
Задание в книжке:
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 позволяет в на- шем примере избавиться от массива целых чисел, обозначающих дни неде- ли, поскольку автоматически формируется столбец целых чисел, нумерую- щих строки результирующего набора. По умолчанию этот столбец называется
ordinality. Это имя можно использовать в запросе. Самостоятельно модифи- цируйте запрос с применением предложения WITH ORDINALITY.
Я действительно минут 40 сидел и не понимаю до сих пор как синтаксически правильно это написать. Буду очень благодарен за напутствие
Ответы (1 шт):
/*
with routes as (
select 'Москва' as departure_city, '{ 1, 2, 3, 4, 5 }'::integer[] as days_of_week
union
select 'Минск' as departure_city, '{ 1, 2, 3}'::integer[] as days_of_week
union
select 'Москва' as departure_city, '{ 1, 3, 5}'::integer[] as days_of_week
)
*/
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(
'{ "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Сб.", "Вс."}'::text[]
) WITH ORDINALITY AS dw( name_of_day, num_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;