Почему я не могу использовать функцию агрегирования, такую ​​как count в функции "lag"? - PullRequest
0 голосов
/ 25 октября 2019

Я пытался лучше понять, как работает оконная функция, и обнаружил, что столкнулся со следующей проблемой.

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

Я работаю с mariadb 10.3 и следующей базой данных:

CREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score int);

INSERT INTO student_test VALUES 
    ('Chun', 'SQL', 75), ('Chun', 'Tuning', 73), 
    ('Esben', 'SQL', 43), ('Esben', 'Tuning', 31), 
    ('Kaolin', 'SQL', 56), ('Kaolin', 'Tuning', 88), 
    ('Tatiana', 'SQL', 87);

Когда я выполняюследующее предложение:

select name,test,score, (lag(count(score),1) over (order by name))as previous_count
      from student_test
      group by name;

Я получаю следующую ошибку: Неправильное использование групповой функции

И я думаю, хорошо, я не могу использовать функцию агрегирования какпараметр оконной функции (может быть потому, что в это время расчет не был обработан).

Покупать при выполнении следующего предложения:

select name,test,score, (sum(count(score)) over (order by name))as previous_count
      from student_test
      group by name;

Я получаю следующий результат:

name    test    score   previous_count
Chun    SQL     75           2
Esben   SQL     43           4
Kaolin  SQL     56           6
Tatiana SQL     87           7

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

Мой вопрос:

Почему я не могу использовать иФункция агрегирования в качестве параметра функции отставания, но я могу использовать его в качестве параметрафункция окна суммы?

...