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; |