我有两个表...
用户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
这很奇怪。似乎没有人意识到这很简单。
select count(*) overall
from (select mobile_no from user1 union select mobile_no from user2)
这两张表的区别是 union
和 union all
就是 union
删除重复的号码。
假设你要找的是手机号码的独特号码。
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
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
宁可使用 UNION而不是UNION ALL
UNION操作符默认只选择不同的值。要允许重复的值,请在UNION中使用ALL关键字。
SELECT COUNT(mobile_no) Overall
FROM (
SELECT
mobile_no
FROM User1
UNION
SELECT
mobile_no
FROM User2
) Q
EDIT:
正如 @Bohemian 所说的,不需要使用 distinct。
试试这个。
SELECT COUNT(*) FROM
( (SELECT * FROM user1) UNION
(SELECT user_id as u1,mobile_no as m1
FROM user2) ) as a1 GROUP BY a1 .1