SQL创建两表带SUM聚合视图求和结果异常问题解决
问题原因
你的SQL语句没有给两个表设置关联条件,FROM project, projektzugehoerigkeit 这种无关联条件的隐式连接写法会生成两个表的笛卡尔积——也就是Project表的每一行,都会和projectzugehoerigkeit表的所有行强行匹配。
你可以自行核算:projectzugehoerigkeit表所有ProjZeit的总和是60+40+100+20+50+30+80+20=400,笛卡尔积生成的结果里,每个项目都会匹配到全量的工时记录,分组求和后自然每个项目的结果都是400,和实际业务关联逻辑不符。
另外本次需求不需要用到personal表,无需关联该表。
正确实现方式
用显式JOIN关联两个表,通过两表共有的ProjID字段做匹配关联,再分组求和即可,代码如下:
CREATE VIEW ueberblick1 AS SELECT project.Projekt, SUM(projektzugehoerigkeit.ProjZeit) AS ProjektStundenInsgesamt FROM project INNER JOIN projektzugehoerigkeit ON project.ProjID = projektzugehoerigkeit.ProjID GROUP BY project.ProjID, project.Projekt;
注:分组时带上ProjID是更稳妥的写法,避免后续出现同名项目时统计出错。
执行后输出结果和预期完全一致:
| Projekt | ProjektStundenInsgesamt |
|---|---|
| A | 160 |
| B | 90 |
| C | 150 |
内容的提问来源于stack exchange,提问作者cristopher donaldo
相关产品推荐
相关产品推荐

