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