MySQL:加入两项计数

时间:2017-09-09 18:39:10

标签: mysql sql

以下查询提供了我想要的结果:

SELECT DISTINCT `unique_id`, count(`unique_id`) AS TotalCount 
FROM `table1` 
GROUP BY `unique_id`;

它为我提供了独特的unique_id列和一个计数,这正是我想要的输出。

Output:
unique_id | TotalCount
123       | 2
444       | 56

但是,我有另一个表,其值比table1少,但我想从查询中获得相同的信息,这意味着:

SELECT DISTINCT `unique_id`, count(`unique_id`) AS DifferentCount 
FROM `table2` 
GROUP BY `unique_id`;

现在我想将两个查询合并为一个,这意味着,我想要一个输出:

Output:
unique_id | TotalCount | DifferentCount
123       | 2          | 1
444       | 56         | 30

我该怎么做?感谢。

2 个答案:

答案 0 :(得分:2)

请勿将select distinctgroup by一起使用。使用它是非常非常正确的。

我建议你这样做:

select unique_id, sum(cnt1) as cnt1, sum(cnt2) as cnt2
from ((select unique_id, count(*) as cnt1, 0 as cnt2
       from table1
       group by unique_id
      ) union all
      (select unique_id, 0 as cnt1, count(*) as cnt2
       from table2
       group by unique_id
      )
     ) t12
group by unique_id;

这将确保您从两个表中获取所有ID。

答案 1 :(得分:1)

你可以做到

select uid, count(itm1) cnt1, count(itm2) cnt2 from
( select unique_id uid, 1 itm1, null itm2 from table1
  union all
  select unique_id, null, 1 from table2 ) both
group by uid