Предполагая, что ссылка на средние значения - красная сельдь, а ваш 35% -ный пример - опечатка ...
Вы хотите сравнить значения из двух строк, чтобы вы могли использовать функцию lag()
для просмотра данных за предыдущий год:
LAG(COUNT(*)) OVER (ORDER BY TO_CHAR (Application_Date, 'yyyy'))
Затем рассчитайте процентное изменение как обычно, используя счет текущего года и счет предыдущего года:
SELECT TO_CHAR (Application_Date, 'yyyy') AS year,
COUNT(*) AS year_count,
100 * (COUNT(*) - LAG(COUNT(*)) OVER (ORDER BY TO_CHAR (Application_Date, 'yyyy')))
/ LAG(COUNT(*)) OVER (ORDER BY TO_CHAR (Application_Date, 'yyyy')) AS percentage_change
FROM Services
GROUP BY TO_CHAR (Application_Date, 'yyyy')
ORDER BY 1 DESC;
YEAR YEAR_COUNT PERCENTAGE_CHANGE
---- ---------- -----------------
2018 5000 25
2017 4000 0
2016 4000
Вы можетеотформатируйте вычисленное значение так, как вы хотите (не ясно, если вы хотите, чтобы знак% был частью результата, например, в виде строки), и вы можете использовать coalesce, чтобы заменить нулевое значение для первого года на ноль, если хотите.
Вы также можете использовать CTE или встроенное представление, чтобы выполнить лаг только один раз:
SELECT year,
year_count,
100 * (year_count - prev_year_count) / prev_year_count AS percentage_change
FROM (
SELECT TO_CHAR (Application_Date, 'yyyy') AS year,
COUNT(*) AS year_count,
LAG(COUNT(*)) OVER (ORDER BY TO_CHAR (Application_Date, 'yyyy')) AS prev_year_count
FROM Services
GROUP BY TO_CHAR (Application_Date, 'yyyy')
)
ORDER BY 1 DESC;
Лично при использовании значений года я склонен трактовать их как числа, а не строки, поэтому яиспользовал экстракт:
select year,
year_count,
100 * (year_count - prev_year_count) / prev_year_count as percentage_change
from (
select extract(year from application_date) as year,
count(*) as year_count,
lag(count(*)) over (order by extract(year from application_date)) as prev_year_count
from services
group by extract(year from application_date)
)
order by 1 desc;
YEAR YEAR_COUNT PERCENTAGE_CHANGE
---------- ---------- -----------------
2018 5000 25
2017 4000 0
2016 4000
дБ <> скрипка