Как создать столбец с процентной разницей между числами в одном столбце - PullRequest
0 голосов
/ 04 июля 2019

Я новичок в SQL, и я подумал, что хорошим способом применить то, что я знаю, было бы попытаться найти небольшой проект, который я нашел. Мне удалось найти годовой доход, но приглашение запрашивает изменение в процентах по сравнению с предыдущим годом. Я не могу понять, как добавить столбец с этим процентным изменением.

Я пытался использовать ISNULL, DATEDIFF и LAG, но не думаю, что использую его правильно.

Вот код, который создает таблицу:

SELECT CAST(strftime('%Y', InvoiceDate) AS integer) AS YearOfSale, SUM(Total) AS TotalRev
FROM invoices
GROUP BY 1;

И код, который я пытался использовать для создания нового столбца:

WITH yearlySales AS (
    SELECT CAST(strftime('%Y', InvoiceDate) AS integer) AS YearOfSale, SUM(Total) AS TotalRev
    FROM invoices
    GROUP BY 1
)
SELECT X.*, ISNULL(DATEDIFF(year, X.PREVDATE, X.YearOfSales),0) AS YearDiff
FROM (SELECT y.*, LAG(y.YearlySales) OVER( ORDER BY YEARLYSALES) AS PREVDATE  FROM yearlySales y )X;

Я ожидаю, что столбец будет выглядеть следующим образом:

+------------+----------+-------------+
| YearOfSale | TotalRev | PercentDiff |
+------------+----------+-------------+
| 2009       | 449.46   | 7.12        |
+------------+----------+-------------+
| 2010       | 481.45   | -2.46       |
+------------+----------+-------------+
| 2011       | 469.58   | 1.69        |
+------------+----------+-------------+
| 2012       | 477.53   | -5.64       |
+------------+----------+-------------+
| 2013       | 450.58   | null        |
+------------+----------+-------------+

Мой код даже не скомпилируется в браузере БД для SQLite.

1 Ответ

0 голосов
/ 04 июля 2019

Это то, что вы хотите?

SELECT CAST(strftime('%Y', InvoiceDate) AS integer) AS YearOfSale,
       SUM(Total) AS TotalRev,
       SUM(TOTAL) / LAG(SUM(TOTAL)) OVER (ORDER BY MIN(InvoiceDate)) - 1
FROM invoices
GROUP BY 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...