gpt4 book ai didi

MySQL,获取两个查询的总和

转载 作者:行者123 更新时间:2023-11-29 03:53:42 25 4
gpt4 key购买 nike

我有三个关于 Product 的不同表,它们具有不同的列和结构,假设

产品 1产品 2产品 3

因此,我试图获取具有相同 user_id 的三个表的计数 (*) 之和,即 foreach user_id 字段。

表 - 产品 1

select P.user_id, count(*) 
from Product1 P
group by P.user_id

表 - 产品 2

select P.user_id, count(*) 
from Product2 P
group by P.user_id

表格 - Product3

select P.user_id, count(*) 
from Product3 P
group by P.user_id

他们给我 user_id 字段和 count(*),

我可以添加 count(*) 的结果,foreach user_id 字段吗?提前谢谢

最佳答案

具有相同结构的三个表通常是数据库设计不佳的标志。您应该找出将这些表组合成一个表的方法。

在任何情况下,您都可以汇总结果。一种方法是:

select user_id, sum(cnt)
from ((select user_id, count(*) as cnt
from product1
group by user_id
) union all
(select user_id, count(*) as cnt
from product2
group by user_id
) union all
(select user_id, count(*) as cnt
from product3
group by user_id
)
) up
group by user_id;

您想使用union all 而不是join 因为MySQL 不支持完全外部连接Union all 确保包含所有三个表中的用户。

聚合两次(在子查询和外部查询中)允许 MySQL 使用索引进行内部聚合。这可能是一种性能优势。

此外,如果您要查找特定用户或一组用户,请在子查询中使用 where 子句。这比将所有数据放在子查询中然后进行过滤更有效(在 MySQL 中)。

关于MySQL,获取两个查询的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48642354/

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