gpt4 book ai didi

Mysql 对两个不同表的计数和求和

转载 作者:行者123 更新时间:2023-11-29 06:18:28 25 4
gpt4 key购买 nike

我在 php 和 mysql 中遇到一些查询问题:我有 2 个不同的表,它们有一个共同字段:

表1

id |点击次数| num_g |猫 | usr_id |事件

1 | 10 | 10 11 | 11 1 | 53 | 53 1

2 | 13 | 16 | 16 3 | 53 | 53 1

1 | 10 | 10 22 | 22 1 | 22 | 22 1

1 | 10 | 10 21 | 21 3 | 22 | 22 1

1 | 2 | 6 | 2 | 11 | 11 1

1 | 11 | 11 1 | 1 | 11 | 11 1

表2

id | usr_id |点

1 | 53 | 53 300

<小时/>

现在我使用此语句来对表 1 中每个 id 计数 + 1 的总数进行求和

SELECT usr_id, COUNT( id ) + SUM( num_g + hits ) AS tot_h FROM table1 WHERE usr_id!='0' GROUP BY usr_id ASC LIMIT 0 , 15

我得到了每个 usr_id 的总数

usr_id| tot_h |

53 | 50

22 | 63

11 | 20

直到这里一切都好,现在我有第二张带有额外积分的表(表2)我试试这个:

SELECT usr_id, COUNT( id ) + SUM( num_g + hits ) + (SELECT points FROM table2 WHERE usr_id != '0' ) AS tot_h FROM table1 WHERE usr_id != '0' GROUP BY usr_id ASC LIMIT 0 , 15

但它似乎给所有用户加了 300 点额外积分:

usr_id| tot_h |

53 | 350

22 | 363

11 | 320

现在我如何才能像第一次尝试一样获得总数,但是+一个语句中的第二个表?因为现在我在第二个表中只有一个条目,但我可以在那里添加更多条目。感谢您的所有帮助。

<小时/>

嗨,托马斯,感谢您的回复,我认为方向正确,但我得到了奇怪的结果,例如

usr_id | tot_h

22 | NULL <== 我认为 null 是因为 usr_id 在 table2 中没有值

53 |第1033章

就像第二个用户正在获取所有值一样。然后我尝试这个:

      SELECT table1.usr_id, COUNT( table1.id ) + SUM( table1.num_g + table1.hits + table2.points ) AS tot_h
FROM table1
LEFT JOIN table2 ON table2.usr_id = table1.usr_id
WHERE table1.usr_id != '0'
AND table2.usr_id = table1.usr_id
GROUP BY table1.usr_id ASC

相同的结果,我只是得到所有值的总和,而不是每个用户的值,我需要这样的结果:

usr_id | tot_h

53 | 53 <==== table1 加 300 分

22 | 56 <==== table2 加 100 分

/////////我需要的结果///////////

usr_id | tot_h

53 | 353 <==== table2 加 300 分

22 | 156 <==== table2 加 100 分

我认为结构需要是这样的伪陈述;)

从table1中统计所有id,得到usr_id所在记录的条数,然后sum命中+num_g,从table2中选择usr_id与table1相同的额外点,得到结果:

usr_id | tot_h

53 | 353

22 | 156

最佳答案

子查询中没有任何内容可以计算额外的点以将其与外部 Table1 相关联。因此,一种解决方案是添加这种相关性:

SELECT usr_id
, COUNT( id ) + SUM( num_g + hits )
+ (SELECT points
FROM table2
WHERE table2.usr_id = table1.usr_id ) AS tot_h
FROM table1
WHERE usr_id != '0'
GROUP BY usr_id ASC
LIMIT 0 , 15

另一种解决方案是直接加入它:

SELECT table1.usr_id
, COUNT( table1.id )
+ SUM( table1.num_g + table1.hits + table2.points )
AS tot_h
FROM table1
Left Join table2
On table2.usr_id = table1.usr_id
WHERE table1.usr_id != '0'
GROUP BY table1.usr_id ASC
LIMIT 0 , 15

关于Mysql 对两个不同表的计数和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5138117/

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