Расчет процентного изменения с помощью функции SQL windows analyti c - PullRequest
0 голосов
/ 20 апреля 2020

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

name  subject  session     term  totalscore
-------------------------------------------
jack  maths    2013/2014    1      70
jack  eng      2013/2014    1      65
jack  science  2013/2014    1      80
jack  maths    2013/2014    2      72
jack  eng      2013/2014    2      87
jack  science  2013/2014    2      67
jack  maths    2013/2014    3      70
jack  eng      2013/2014    3      70
jack  science  2013/2014    3      85

Я пытался использовать функцию windows LAG, как показано ниже, для вычисления общего балла процентное изменение, но получил значения NULL в столбце процент_обменов

SELECT
    name,
    subject,
    term,
    session,
    totalscores -  lag(totalscores, 1) over(partition by subject, session, term order by session, term) / 100*100
FROM
    totalscore
GROUP BY
    name, subject, session, term, totalscores
ORDER BY 
    term

Таблица ожидаемых результатов должна выглядеть следующим образом:

name  subject  session     term  totalscore   percent_change
------------------------------------------------------------
jack  maths    2013/2014    1      70           null
jack  eng      2013/2014    1      65           null
jack  science  2013/2014    1      80           null  
jack  maths    2013/2014    2      72           2%
jack  eng      2013/2014    2      87           22%
jack  science  2013/2014    2      67          -5%
jack  maths    2013/2014    3      70          -2%
jack  eng      2013/2014    3      70          -17%
jack  science  2013/2014    3      85           16%

Есть ли способ написать это, чтобы исправить это ошибка? Я буду признателен за любую помощь, которую я могу получить. Благодаря.

1 Ответ

1 голос
/ 20 апреля 2020

Кажется, вы просто хотите разницу (потому что это уже проценты). Но ключ получает partition by правильный для lag():

select name, subject, term, session,
       (totalscores -
        lag(totalscores) over(partition by name, subject order by session, term)
       ) as diff
from totalscore
order by name, subject, session, term;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...