我试图更好地了解window函数在内部如何工作,并发现下一个问题。
首先说查询没有意义,并且我没有寻找替代方法,我想了解为什么我不能做下一个。
我正在使用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
结果很好,您要添加记录数,每个名称都有两个记录。
我的问题是:
为什么不能将聚合函数用作滞后函数参数,但可以将其用作求和窗函数的参数?