为什么不能在“滞后”函数中使用诸如count之类的聚合函数?

时间:2019-10-25 00:59:38

标签: sql mariadb aggregate-functions window-functions

我试图更好地了解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

结果很好,您要添加记录数,每个名称都有两个记录。

我的问题是:

为什么不能将聚合函数用作滞后函数参数,但可以将其用作求和窗函数的参数?

0 个答案:

没有答案