Как объединить 3 cte? | |
---|---|
tata Автор Сообщений: 3508 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Пробовала через запятые, не получилось, потому что запуталась в скобках
--Первый select WITH customer_count_info AS ( SELECT s.country, c.customer_id, COUNT(r.rental_id) AS num_films_rented, ROW_NUMBER() OVER (PARTITION BY s.country ORDER BY COUNT(r.rental_id) DESC) AS rn FROM customer c JOIN address a ON c.address_id = a.address_id JOIN city g ON a.city_id = g.city_id JOIN country s ON g.country_id = s.country_id JOIN rental r ON c.customer_id = r.customer_id JOIN payment p ON r.customer_id = p.customer_id and r.rental_id = p.rental_id GROUP BY s.country, c.customer_id ) SELECT country, customer_id, num_films_rented FROM customer_count_info WHERE rn = 1 ORDER BY country; -- второй select with customer_rental_info AS ( SELECT s.country, c.customer_id, sum(p.amount) AS max_sum_rented, ROW_NUMBER() OVER (PARTITION BY s.country ORDER BY COUNT(r.rental_id) DESC) AS rn FROM customer c JOIN address a ON c.address_id = a.address_id JOIN city g ON a.city_id = g.city_id JOIN country s ON g.country_id = s.country_id JOIN rental r ON c.customer_id = r.customer_id JOIN payment p ON r.customer_id = p.customer_id and r.rental_id = p.rental_id GROUP BY s.country, c.customer_id ) SELECT country, customer_id, max_sum_rented FROM customer_rental_info WHERE rn = 1 ORDER BY country; -- третий select with customer_last_rental AS ( SELECT s.country, c.customer_id, r.rental_date, ROW_NUMBER() OVER (PARTITION BY s.country ORDER BY r.rental_date DESC) AS rn FROM customer c JOIN address a ON c.address_id = a.address_id JOIN city g ON a.city_id = g.city_id JOIN country s ON g.country_id = s.country_id JOIN rental r ON c.customer_id = r.customer_id ) SELECT country, customer_id, rental_date FROM customer_last_rental WHERE rn = 1 ORDER BY country; -- НЕ РАБОТАЕТ, ПОТОМУ ЧТО ВНЕ WITH НЕ ЖИВЕТ SELECT * FROM customer_count_info c1 left join customer_rental_info c2 ON c1.country = c2.country and c1.customer_id = c2.customer_id left join customer_last_rental c3 ON c1.country = c3.country and c1.customer_id = c3.customer_id Исправлено 1 раз(а). Последнее : tata, 24.04.24 23:19 ![]() |
Re: Как объединить 3 cte? | |
---|---|
sphinx Сообщений: 31986 Откуда: Екатеринбург Дата регистрации: 22.11.2006 |
Цитата: Таня, тебе этот запрос совсем не нужен. В задании нужно просто селекты написать, для трех ситуаций. Но если очень хочется сделать то, чего не требовалось - вывести разноплановые итоги в сводном запросе - то: - выводить не "звездочкой" (*) поля, а указать все же явно, причем для NULL-значений обернуть в функцию COALESCE(). - для именованных подзапросов не нужны селекты за ними, ты же их результаты не используешь в самом последнем (объединяющем запросе) - если ну очень нужны селекты для отбора первой записи - так их тоже обернуть в именованные подзапросы и, соответсвенно, брать результаты уже из них. С учетом всего вышесказанного получается минимум переделок:
P.S. На производстве будут запросы на порядок сложнее, я про то, что надо выбирать работу по силам. ------------------ "Veni, vidi, vici!"(с) Исправлено 1 раз(а). Последнее : sphinx, 25.04.24 06:52 ![]() |
Re: Как объединить 3 cte? | |
---|---|
tata Автор Сообщений: 3508 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Саш, как ты читаешь-то вообще? Через слово? Для каждой страны определите и выведите одним SQL-запросом покупателей, которые попадают под условия... Исправлено 2 раз(а). Последнее : tata, 25.04.24 07:51 ![]() |
Re: Как объединить 3 cte? | |
---|---|
tata Автор Сообщений: 3508 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
.
Исправлено 1 раз(а). Последнее : tata, 25.04.24 08:52 ![]() |
Re: Как объединить 3 cte? | |
---|---|
sphinx Сообщений: 31986 Откуда: Екатеринбург Дата регистрации: 22.11.2006 |
Одним запросом, но каждую ситуацию отдельно. Написано не очень однозначно, но требуют один запрос для каждой ситуации. ------------------ "Veni, vidi, vici!"(с) ![]() |
Re: Как объединить 3 cte? | |
---|---|
sphinx Сообщений: 31986 Откуда: Екатеринбург Дата регистрации: 22.11.2006 |
Мой хороший совет позволит тебе сэкономить время на те компании, в которым тебе точно будет очень сложно. Тут обижаться надо, а спасибо сказать. ------------------ "Veni, vidi, vici!"(с) ![]() |
Re: Как объединить 3 cte? | |
---|---|
tata Автор Сообщений: 3508 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Если кому надо backup, вышлю, он маленький, 700 кб.
![]() |
Re: Как объединить 3 cte? | |
---|---|
PaulWist Сообщений: 14762 Дата регистрации: 01.04.2004 |
Через запятую.
Но результат будет неправильный ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 1 раз(а). Последнее : PaulWist, 25.04.24 11:26 ![]() |
Re: Как объединить 3 cte? | |
---|---|
sphinx Сообщений: 31986 Откуда: Екатеринбург Дата регистрации: 22.11.2006 |
Паша, ты мой запрос повторил.
![]() ------------------ "Veni, vidi, vici!"(с) ![]() |
Re: Как объединить 3 cte? | |
---|---|
tata Автор Сообщений: 3508 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Я так пробовала, не работает вообще. SQL Error [42601]: ОШИБКА: ошибка синтаксиса (примерное положение: "with") Позиция: 544 Позиция ошибки: line: 18 pos: 543 (около 2-го with, сразу после запятой) ![]() |
Re: Как объединить 3 cte? | |
---|---|
tata Автор Сообщений: 3508 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Саша, твой запрос был совсем не такой. ![]() |
Re: Как объединить 3 cte? | |
---|---|
PaulWist Сообщений: 14762 Дата регистрации: 01.04.2004 |
Точку с запятой поставь перед with
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Как объединить 3 cte? | |
---|---|
PaulWist Сообщений: 14762 Дата регистрации: 01.04.2004 |
Версия ПГ какая??
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Как объединить 3 cte? | |
---|---|
tata Автор Сообщений: 3508 Откуда: Йошкар-Ола Дата регистрации: 23.10.2005 |
Есть 16.2, есть Pro, тоже 16.2 ![]() |
Re: Как объединить 3 cte? | |
---|---|
PaulWist Сообщений: 14762 Дата регистрации: 01.04.2004 |
Пришли на почту, у меня правда 12.16, может поднимется.
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
© 2000-2025 Fox Club  |