UNION All,Group BY,然后得到总体COUNT。

问题描述 投票:1回答:5

我有两个表...

用户1

user_id     mobile_no
   1          1111
   2          2222

用户2

user_id     mobile_no
   1          3333
   2          2222

我想先对这些表进行UNION,然后按分组,然后再统计总记录。

我正在使用这个查询,但它不工作。

SELECT COUNT(Q2.total) AS Overall
FROM (
   SELECT COUNT(Q.user_id) AS total
   FROM (
     SELECT * FROM user1
     UNION ALL 
     SELECT * FROM user2
   ) Q
  GROUP BY Q.mobile_no
) Q2

如果我使用内部查询e-g:

   SELECT COUNT(Q.user_id) AS total
   FROM (
     SELECT * FROM user1
     UNION ALL 
     SELECT * FROM user2
   ) Q
  GROUP BY Q.mobile_no

我得到这些结果,其实我想再算一次这些结果... ...

total
 2
 1
 1

我希望得到这样的结果

Overall
   3
mysql sql group-by union
5个回答
3
投票

这很奇怪。似乎没有人意识到这很简单。

select count(*) overall
from (select mobile_no from user1 union select mobile_no from user2)

这两张表的区别是 unionunion all 就是 union 删除重复的号码。


0
投票

假设你要找的是手机号码的独特号码。

select count(distinct mobile_no) as Overall
from (
  select user_id, mobile_no
  from user1
  union all
  select user_id, mobile_no
  from user2
) a

0
投票
select count (distinct mobile_no) from
(select user_id, mobile_no from user1 u1
UNION ALL
select user_id, mobile_no from user2 u2
) X
group by X.mobile_no

0
投票

宁可使用 UNION而不是UNION ALL

SQL UNION 操作员

UNION操作符默认只选择不同的值。要允许重复的值,请在UNION中使用ALL关键字。

SELECT  COUNT(mobile_no) Overall
FROM    (
            SELECT  
                    mobile_no
            FROM    User1
            UNION
            SELECT  
                    mobile_no
            FROM    User2
        ) Q

EDIT:

正如 @Bohemian 所说的,不需要使用 distinct。


0
投票

试试这个。

SELECT COUNT(*) FROM 
   ( (SELECT * FROM user1) UNION 
      (SELECT user_id as u1,mobile_no as m1
      FROM user2) )  as a1  GROUP BY a1 .1
© www.soinside.com 2019 - 2024. All rights reserved.