MySQL,获得两个查询的总和

By simon at 2018-02-07 • 0人收藏 • 66人看过

我有三个不同的表格,Product有不同的字段, 承担 产品1 *,产品2 产品3 * 所以,我试图得到相同user_id的三个表的总数() 领域。 第一)

select P.user_id, count(*) 
from Product1 P  
group by P.user_id
第二个)
select P.user_id, count(*) 
from Product2 P  
group by P.user_id
第三个)
select P.user_id, count(*) 
from Product3 P  
group by P.user_id
他们给我user_id字段和count(*), 可以添加count(
)的结果吗?有相同的* user_id *?谢谢你, 提前

7 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

有三张结构相同的表通常是数据库不好的标志 设计。你应该想出方法来结合表成一个单一的表。 无论如何,您可以汇总结果。一种方法是:

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 ra而不是join因为MySQL呢 不支持full outer join. Union all保证所有三个用户 表a包括在内。 聚合两次(在子查询和外部查询中)允许MySQL使用 内部聚合的索引。 Ť帽子可以是一个性能优势。 另外,如果您正在查找特定用户或一组用户,请使用 where条款子查询这比MySQL更有效率 把所有的数据放在子查询中,然后做filteri一。

2018-02-07   #2

结合使用UNION的结果,然后做加法。 * *查询

select t.`user_id`, sum(`count`) as `total` from(
    select `user_id`, count(*) as `count`
    from `Product1`
    group by `user_id`
    union all
    select `user_id`, count(*) 
    from `Product2` 
    group by `user_id`
    union all
    select `user_id`, count(*) 
    from `Product3`
    group by `user_id`
) t
group by t.`user_id`;

2018-02-07   #3

有三张结构相同的表通常是数据库不好的标志 设计。你应该想出方法来结合表成一个单一的表。 无论如何,您可以汇总结果。一种方法是:

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 ra而不是join因为MySQL呢 不支持full outer join. Union all保证所有三个用户 表a包括在内。 聚合两次(在子查询和外部查询中)允许MySQL使用 内部聚合的索引。 Ť帽子可以是一个性能优势。 另外,如果您正在查找特定用户或一组用户,请使用 where条款子查询这比MySQL更有效率 把所有的数据放在子查询中,然后做filteri一。

2018-02-07   #4

你可以总结所有工会的结果

select user_id, sum(my_count)
from (

select P.user_id, count(*)  my_count
from Product1 P  
group by P.user_id
UNION ALL
select P.user_id, count(*) 
from Product2 P  
group by P.user_id
UNION ALL 
select P.user_id, count(*) 
from Product3 P  
group by P.user_id ) t
group by user_id

2018-02-07   #5

是的你可以 :)

SELECT SUM(userProducts) userProducts 
FROM (
    SELECT count(user_id) userProducts FROM Product1 WHERE user_id = your_user_id
    UNION ALL
    SELECT count(user_id) userProducts FROM Product2 WHERE user_id = your_user_id
    UNION ALL
    SELECT count(user_id) userProducts FROM Product3 WHERE user_id = your_user_id
) s

2018-02-07   #6

请在下面尝试。没有尝试在分贝,所以可能会得到语法错误。 选择p.userid,sum(total)from(选择P.userid,count()total从 product1 p group by P.userid union all选择P.userid,count()total from product2 p组通过P.userid union all选择P.userid,计数(*)总数 product3 p group by P.user_id)a

2018-02-07   #7

是的,我们可以使用join汇总来自不同tables的结果 和union根据我们的要求。在你的案例Union All将工作 完美,并可以使用tables5而不是编写优化查询 count(*),因为它使用杉木st更多的是table的索引 聚集索引。

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

登录后方可回帖

Loading...