Как получить процентное изменение от предыдущих значений? - PullRequest
0 голосов
/ 03 мая 2020

База данных SQLite здесь

Сколько дохода генерируется каждый год в таблице счетов-фактур, и каково ее процентное изменение по сравнению с предыдущим годом?

I вычислили общий доход за каждый год, но я не уверен, как получить процентное изменение дохода за предыдущий год.

Вот мой код на данный момент,

SELECT CAST(strftime('%Y', invoices.InvoiceDate) AS INT) 'Year', SUM(invoices.Total) 'Total Revenue'
FROM invoices
GROUP BY CAST(strftime('%Y', invoices.InvoiceDate) AS INT);

Как получить значение процентного изменения по сравнению с предыдущим годом?

Ответы [ 2 ]

1 голос
/ 03 мая 2020

С LAG() оконной функцией:

SELECT 
  CAST(strftime('%Y', InvoiceDate) AS INT) Year, 
  SUM(Total) "Total Revenue",
  100.0 * ((1.0 * SUM(Total) / LAG(SUM(Total)) OVER (ORDER BY CAST(strftime('%Y', InvoiceDate) AS INT))) - 1) percent_change
FROM invoices
GROUP BY Year;

См. Упрощенную демонстрацию .

0 голосов
/ 03 мая 2020

Получил ответ сам себе, так что пост здесь тоже

WITH prevYear AS (SELECT CAST(strftime('%Y', invoices.InvoiceDate) AS INT) 'PreviousYear', SUM(invoices.Total) 'PrevYearRevenue'
FROM invoices
GROUP BY CAST(strftime('%Y', invoices.InvoiceDate) AS INT)),
currentYear AS (SELECT CAST(strftime('%Y', invoices.InvoiceDate) AS INT) 'CurrentYear', SUM(invoices.Total) 'CurrentYearRevenue'
FROM invoices
GROUP BY CAST(strftime('%Y', invoices.InvoiceDate) AS INT))

SELECT currentYear.CurrentYear, currentYear.CurrentYearRevenue, ROUND((CurrentYearRevenue - PrevYearRevenue)/PrevYearRevenue * 100, 2) 'Percent Change'
FROM currentYear
JOIN prevYear ON currentYear.CurrentYear = prevYear.PreviousYear + 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...