最近忙于公司产品和项目,很有没有写博客了,碰巧今天遇上一个问题,纠结了比较久,在网上搜索了一些资料最终得出解决方案。
业务场景如下:
考生表tblUser:
标识列(Id) | 姓名(Name) | 总分(TotalScore) |
1 | 张三 | NULL |
2 | 李四 | NULL |
3 | 王五 | NULL |
得分表tblScore:
考生标识列(UserId) | 姓名(Name) | 科目(Subject) | 得分(Score) |
1 | 张三 | 数学 | 86 |
1 | 张三 | 语文 | 99 |
2 | 李四 | 数学 | 98 |
2 | 李四 | 语文 | 85 |
3 | 王五 | 数学 | 59 |
3 | 王五 | 语文 | 51 |
我们需要使用SUM()和GROUP把附表B中的总分累加起来,赋值给主表A中的总分。
1. 先查询考生表中的数据,遍历所有考生,将考生总分查询出来,单条更新到考生表中。此方法执行效率很低下,遍历过程中会有N次数据库连接。
2. 在UPDATE语句中使用SUM()聚合函数,代码如下:
UPDATE tblUser SET TotalScore=temp.AllScore FROM ( SELECT SUM(s.Score) AllScore,s.UserId FROM tblScore AS s GROUP BY s.UserId ) temp, tblUser WHERE temp.UserId=tblUser.Id
执行成功!