如何在SQL学生任务计数查询中新增按日期汇总统计列
解决方案
你可以通过窗口聚合函数实现需求,这是兼容性最强、代码最简洁的实现方式,支持SQL Server、MySQL 8.0+、PostgreSQL等所有主流新版本数据库。
原来的查询里DISTINCT是冗余的,因为已经通过GROUP BY指定了分组维度,返回结果天然去重,可以直接去掉。修改后的查询如下:
SELECT Date , Task_Name [Task Performed] , Student_Name [Name] , COUNT(Name) [Count] , SUM(COUNT(Name)) OVER (PARTITION BY Date) [Total Count by Date] FROM Datamining.dbo.Registry GROUP BY Date, Task_Name, Student_Name
低版本数据库兼容方案
如果你使用的是不支持窗口函数的老版本数据库(比如MySQL 5.x),可以通过子查询先计算每日总计数,再和原统计结果关联实现:
SELECT t1.Date , t1.[Task Performed] , t1.Name , t1.Count , t2.DateTotal [Total Count by Date] FROM ( SELECT Date , Task_Name [Task Performed] , Student_Name [Name] , COUNT(Name) [Count] FROM Datamining.dbo.Registry GROUP BY Date, Task_Name, Student_Name ) t1 INNER JOIN ( SELECT Date, SUM(Count) DateTotal FROM ( SELECT Date, COUNT(Name) [Count] FROM Datamining.dbo.Registry GROUP BY Date, Task_Name, Student_Name ) tmp GROUP BY Date ) t2 ON t1.Date = t2.Date
内容的提问来源于stack exchange,提问作者Real Gem
相关产品推荐
相关产品推荐

