Я пытался лучше понять, как работает оконная функция, и обнаружил, что столкнулся со следующей проблемой.
Прежде всего скажу, что запрос не имеет смысла, и Яне ищу альтернативы, я хочу понять, почему я не могу сделать следующее .
Я работаю с 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
Результат в порядке, вы добавляете количество записей, и у каждого имени есть две записи.
Мой вопрос:
Почему я не могу использовать иФункция агрегирования в качестве параметра функции отставания, но я могу использовать его в качестве параметрафункция окна суммы?