gpt4 book ai didi

mysql - 加入同一张表 2 次,然后求和 -> 将实际想要的值加倍

转载 作者:行者123 更新时间:2023-11-29 05:50:54 26 4
gpt4 key购买 nike

我有一个如下所示的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com