View difference between Paste ID: Cg7tD2t3 and nJrRjWvw
SHOW: | | - or go back to the newest paste.
1-
/*Перепишите один из своих прошлых запросов, используя оператор WITH. 
1+
/*Проанализируйте данные из таблицы invoice за 2012 и 2013 годы. В итоговую таблицу должны войти поля:
2-
Составьте сводную таблицу. Посчитайте заказы, оформленные за каждый месяц в течение нескольких лет: с 2011 по 2013 год. Итоговая таблица должна включать четыре поля: invoice_month, year_2011, year_2012, year_2013. Поле month должно хранить месяц в виде числа от 1 до 12. 
2+
month — номер месяца;
3-
Если в какой-либо месяц заказы не оформляли, номер такого месяца всё равно должен попасть в таблицу.
3+
sum_total_2012 — выручка за этот месяц в 2012 году;
4
sum_total_2013 — выручка за этот месяц в 2013 году;
5
perc — процент, который отображает, насколько изменилась месячная выручка в 2013 году по сравнению с 2012 годом.
6-
--P.S переписывать ничего не стал. вот стану мидлом, буду заниматься рефракторингом, а пока действую по принципу "работает - не трогай"
6+
Округлите значение в поле perc до ближайшего целого числа. Отсортируйте таблицу по значению в поле month от меньшего к большему.
7-
SELECT i_month.invoice_month,
7+
8-
       inv_2011.year_2011,
8+
9-
       inv_2012.year_2012,
9+
WITH year_2012 AS
10-
       inv_2013.year_2013
10+
  (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS month,
11-
FROM
11+
          SUM(total)
12-
  (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS invoice_month
12+
13
   WHERE EXTRACT(YEAR FROM CAST(invoice_date AS date)) = 2012
14-
   GROUP BY invoice_month
14+
   GROUP BY month),
15-
   ORDER BY invoice_month) AS i_month
15+
     year_2013 AS
16-
   
16+
  (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS month,
17-
   
17+
          SUM(total)
18-
LEFT JOIN
18+
19-
  (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS invoice_month,
19+
20-
          COUNT(invoice_id) AS year_2011
20+
   GROUP BY month)
21
SELECT year_2012.month AS month,
22-
   WHERE EXTRACT(YEAR FROM CAST(invoice_date AS date)) = 2011
22+
       year_2012.sum AS sum_total_2012,
23-
   GROUP BY invoice_month) AS inv_2011 ON i_month.invoice_month = inv_2011.invoice_month
23+
       year_2013.sum AS sum_total_2013,
24-
   
24+
       --ROUND(100 * (year_2013.sum / year_2012.sum), 0) AS percent
25-
   
25+
       ROUND((year_2013.sum - year_2012.sum) / year_2012.sum * 100) AS perc
26-
LEFT JOIN
26+
FROM year_2012
27-
  (SELECT EXTRACT(MONTH FROM CAST(invoice_date AS date)) AS invoice_month,
27+
--INNER JOIN year_2013 ON year_2012.month = year_2013.month
28-
          COUNT(invoice_id) AS year_2012
28+
LEFT OUTER JOIN year_2013 ON year_2012.month = year_2013.month
29
ORDER BY year_2012.month;