Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Временные таблицы в SQL

Lis Ученик (229), на голосовании 1 год назад
Добрый вечер. Не знаю, как решить((( Помогите, пожалуйста

Перепишите один из своих прошлых запросов с использованием оператора WITH.
Выведите топ-40 самых длинных фильмов, аренда которых составляет больше 2 долларов. Проанализируйте данные о возрастных рейтингах отобранных фильмов. Выгрузите в итоговую таблицу следующие поля:
возрастной рейтинг (поле rating);
минимальное и максимальное значения длительности (поле length), назовите поля min_length и max_length соответственно;
среднее значение длительности (поле length), назовите поле avg_length;
минимум, максимум и среднее для цены просмотра (поле rental_rate), назовите поля min_rental_rate, max_rental_rate, avg_rental_rate соответственно.
Отсортируйте среднюю длительность фильма по возрастанию.

WITH
i AS (SELECT title,
rental_rate,
length,
rating
FROM movie
WHERE rental_rate > 2
ORDER BY length DESC
LIMIT 40),

c AS (SELECT rating,
MIN(length) AS min_length,
MAX(length) AS max_length,
AVG(length) AS avg_length,
MIN(rental_rate) AS min_rental_rate,
MAX(rental_rate) AS max_rental_rate,
AVG(rental_rate) AS avg_rental_rate
FROM movie
GROUP BY rating)
FROM i LEFT JOIN c ON i.rating=c.rating
ORDER BY c.avg_length;
Но выдаёт ошибку(
Голосование за лучший ответ
ㅤ ㅤ Оракул (52273) 1 год назад
Ошибки в запросе могут быть вызваны разными причинами, но судя по структуре запроса, он содержит лишний FROM перед первым подзапросом WITH. Попробуйте исправить запрос следующим образом:

WITH i AS (
SELECT title, rental_rate, length, rating
FROM movie
WHERE rental_rate > 2
ORDER BY length DESC
LIMIT 40
),
c AS (
SELECT rating,
MIN(length) AS min_length,
MAX(length) AS max_length,
AVG(length) AS avg_length,
MIN(rental_rate) AS min_rental_rate,
MAX(rental_rate) AS max_rental_rate,
AVG(rental_rate) AS avg_rental_rate
FROM movie
GROUP BY rating
)
SELECT c.rating, c.min_length, c.max_length, c.avg_length, c.min_rental_rate, c.max_rental_rate, c.avg_rental_rate
FROM i
LEFT JOIN c ON i.rating=c.rating
ORDER BY c.avg_length;

Если это не поможет, пожалуйста, уточните, какая ошибка возникает, чтобы мы могли помочь вам еще более точно.
LisУченик (229) 1 год назад
Благодарю, за помощь))) пишет, что слишком много строк в полученном результате
VV Ученик (152) 1 год назад
дело в том что ты берешь 2й запрос из таблицы movie, а надо брать из среза.
WITH i AS (
select rating, length, rental_rate
from movie
where rental_rate > 2
order by length desc
limit 40
),
c AS (
select rating,
min(length) as min_length ,
max(length) as max_length ,
avg(length) as avg_length ,
min(rental_rate) as min_rental_rate ,
max(rental_rate) as max_rental_rate ,
avg(rental_rate) as avg_rental_rate
FROM i
GROUP BY rating
)
SELECT c.rating, c.min_length, c.max_length, c.avg_length, c.min_rental_rate, c.max_rental_rate, c.avg_rental_rate
FROM c
ORDER BY c.avg_length;
LisУченик (229) 1 год назад
очень вам благодарна!!!!!!! спасибо!!!
Похожие вопросы