View difference between Paste ID: nJrRjWvw and 5YJfMQWN
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;