SHOW:
|
|
- or go back to the newest paste.
1 | - | /*Перепишите один из своих прошлых запросов с использованием оператора WITH. |
1 | + | /*Перепишите один из своих прошлых запросов, используя оператор WITH. |
2 | - | Выведите топ-40 самых длинных фильмов, аренда которых составляет больше 2 долларов. Проанализируйте данные о возрастных рейтингах отобранных фильмов. Выгрузите в итоговую таблицу следующие поля: |
2 | + | Составьте сводную таблицу. Посчитайте заказы, оформленные за каждый месяц в течение нескольких лет: с 2011 по 2013 год. Итоговая таблица должна включать четыре поля: invoice_month, year_2011, year_2012, year_2013. Поле month должно хранить месяц в виде числа от 1 до 12. |
3 | - | возрастной рейтинг (поле rating); |
3 | + | Если в какой-либо месяц заказы не оформляли, номер такого месяца всё равно должен попасть в таблицу. |
4 | - | минимальное и максимальное значения длительности (поле length), назовите поля min_length и max_length соответственно; |
4 | + | |
5 | - | среднее значение длительности (поле length), назовите поле avg_length; |
5 | + | |
6 | - | минимум, максимум и среднее для цены просмотра (поле rental_rate), назовите поля min_rental_rate, max_rental_rate, avg_rental_rate соответственно. |
6 | + | --P.S переписывать ничего не стал. вот стану мидлом, буду заниматься рефракторингом, а пока действую по принципу "работает - не трогай" |
7 | - | Отсортируйте среднюю длительность фильма по возрастанию. |
7 | + | SELECT i_month.invoice_month, |
8 | inv_2011.year_2011, | |
9 | inv_2012.year_2012, | |
10 | - | WITH top_40 AS |
10 | + | inv_2013.year_2013 |
11 | - | (SELECT film_id |
11 | + | FROM |
12 | - | FROM movie |
12 | + | (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS invoice_month |
13 | - | WHERE rental_rate > 2 |
13 | + | FROM invoice |
14 | - | ORDER BY length DESC |
14 | + | GROUP BY invoice_month |
15 | - | LIMIT 40) |
15 | + | ORDER BY invoice_month) AS i_month |
16 | - | SELECT rating, |
16 | + | |
17 | - | MIN(length) AS min_length, |
17 | + | |
18 | - | MAX(length) AS max_length, |
18 | + | LEFT JOIN |
19 | - | AVG(length) AS avg_length, |
19 | + | (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS invoice_month, |
20 | - | MIN(rental_rate) AS min_rental_rate, |
20 | + | COUNT(invoice_id) AS year_2011 |
21 | - | MAX(rental_rate) AS max_rental_rate, |
21 | + | FROM invoice |
22 | - | AVG(rental_rate) AS avg_rental_rate |
22 | + | WHERE EXTRACT(YEAR FROM CAST(invoice_date AS date)) = 2011 |
23 | - | FROM movie |
23 | + | GROUP BY invoice_month) AS inv_2011 ON i_month.invoice_month = inv_2011.invoice_month |
24 | - | INNER JOIN top_40 ON movie.film_id = top_40.film_id |
24 | + | |
25 | - | GROUP BY rating |
25 | + | |
26 | - | ORDER BY AVG(length); |
26 | + | LEFT JOIN |
27 | (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS invoice_month, | |
28 | COUNT(invoice_id) AS year_2012 | |
29 | FROM invoice | |
30 | WHERE EXTRACT(YEAR FROM CAST(invoice_date AS date)) = 2012 | |
31 | GROUP BY invoice_month) AS inv_2012 ON i_month.invoice_month = inv_2012.invoice_month | |
32 | ||
33 | ||
34 | LEFT JOIN | |
35 | (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS invoice_month, | |
36 | COUNT(invoice_id) AS year_2013 | |
37 | FROM invoice | |
38 | WHERE EXTRACT(YEAR FROM CAST(invoice_date AS date)) = 2013 | |
39 | GROUP BY invoice_month) AS inv_2013 ON i_month.invoice_month = inv_2013.invoice_month; |