作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的 SQL 查询:
select L.ID, P.FIRSTNAME as Firstname, P.LASTNAME as Lastname, SUM(R.VAL), SUM(R2.VAL) from LABORATORY L
join RESULT R
on L.ID=R.ID
and R.RESID='Thingy1'
join PERSON P
on P.PERID=R.PERID
and P.LASTNAME={Lastname} <-this is part of the framework I'm working with and gets replaced, don't worry about it
and P.FIRSTNAME={Firstname}
join RESULT R2
on R2.PERID=P.PERID
and R2.RESID='Thingy2'
现在,因为我加入了结果表 2 次,所以两个总和都是它们应该的值的两倍。如果我保留 SUM,我会得到这张表。
123 马努·德莱尔
234迈克尔·舒马赫
423 巴拉克奥巴马
123 马努·德莱尔
234迈克尔·舒马赫
423 巴拉克奥巴马
抱歉,我不知道如何在此处正确显示表格 :P
如您所见,此表中的每个值都出现了 2 次。如果我添加“distinct”,则只有 3 个值(正确),但 SUM 的值仍然加倍。关于我能做些什么的任何线索都会有所帮助。有了计数,我实际上可以写:
count(distinct L.ID)
但这不适用于总和,因为有些人具有相同的值(例如年龄)。总结不同的年龄以获得人们的总年龄是行不通的;)
最佳答案
您似乎正在处理 N-M 联接。为避免重复计算 SUM
,一种解决方案是将聚合查询移动到 JOIN
,如下所示:
select
L.ID,
P.FIRSTNAME as Firstname,
P.LASTNAME as Lastname,
R1.sum_val,
R2.sum_val
from LABORATORY L
join (SELECT ID, SUM(VAL) sum_val FROM RESULT R WHERE RESID='Thingy1' GROUP BY ID) R
on L.ID=R.ID
join PERSON P
on P.PERID=R.PERID
and P.LASTNAME={Lastname}
and P.FIRSTNAME={Firstname}
join (SELECT PERID, SUM(val) FROM RESULT WHERE R2.RESID='Thingy2' GROUP BY PERID) R2
on R2.PERID=P.PERID
使用这种技术,聚合发生在连接的子查询中,不会影响外部查询。
关于mysql - 加入同一张表 2 次,然后求和 -> 将实际想要的值加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313554/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!