sql - 更高级别聚合的总和
问题描述
我在下面的代码中定义了一个表,我希望所有值的总和为 ALLDays,在本例中为 Ajan 36 和 Sam 21。我如何修改下面的查询来获得它,我不允许使用windows功能。我可以通过将另一个查询按学生分组并加入两者来实现要求,但是有没有办法修改下面的查询以满足要求。任何帮助深表感谢。
DECLARE @Table
TABLE(Student varchar(50),
subject varchar(50)
,days int)
Insert into @Table
values('Ajan','English',8),('Ajan','Math',9),('Ajan','Science',7),('Ajan','English',5),('Ajan','Math',4),('Ajan','Science',3),
('Sam','English',7),('Sam','Math',6),('Sam','Science',8)
select student,subject,sum(days) as SubjectDays,'' as AllDays from @Table
group by student,subject
解决方案
如果您不能使用窗口函数,那么一种替代方法是对学生和学科级别的天数总和使用两个单独的子查询。
select t1.student, t1.subject, t1.SubjectDays, t2.AllDays
from
(
select student, subject, sum(days) as SubjectDays
from @Table
group by student, subject
) t1
inner join
(
select student, sum(days) as AllDays
from @Table
group by student
) t2
on t1.student = t2.student;
推荐阅读
- python - 如何更改 Odoo 10 中模型的默认搜索字段?
- javascript - 图形的随机颜色。帆布。javascript
- reactjs - 使用 redux-thunk 捕获错误
- bash - Bash 将多行文件转换为 n 列 CSV
- youtube-api - 关于从服务器或客户端使用 YouTube 数据 API 的困惑
- android - androidTest 包中 ndk-stack 的 obj 文件在哪里
- java - Spring事务行为
- sql - 如何在 insert into 子句中从表中插入非顺序 ID
- c# - 网络播放器错误 UNITY
- office-js - Outlook 加载项 API 不会在 Firefox/Chrome 上一致地触发 ItemChange 事件