SQL两张相同表去重统计

两张相同表
表A:
ID NAME
23 a1
23 b1
24 c1
表B:
ID NAME
23 a1
23 d1
25 e1
一个ID可对应多个不同name,一个name只对应一个ID
表A与表B中ID和name都有重复的和不重复的,
如何联合统计每个ID对应name有多少个(重复的统计一个)

思路:

1.表A UNION 表B,的出来的结果会把相同的ID,NAME过滤掉,如图,重复的23,a1已经过滤只剩一个。

 

 

2.用group by id,得出一个ID有多少条记录,就是该id对应的name的数量

代码如下:

SELECT ID,COUNT(*) num FROM 
(
 SELECT * FROM 表A 
 UNION
 SELECT * FROM 表B
) tb
GROUP BY tb.ID 

结果如图:

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-15
select id,count(distinct name)
from
select name,id from A
union all
select name,id from B
)
group by id本回答被网友采纳
第2个回答  2013-09-06
create table A(id int,
name varchar(10))
insert into A (id,name) values ('23','a1')
insert into A (id,name) values ('23','b1')
insert into A (id,name) values ('24','c1')
create table B(id int ,
name varchar(10))
insert into A (id,name) values ('23','a1')
insert into A (id,name) values ('23','d1')
insert into A (id,name) values ('25','e1')

select id,count(distinct name) as 个
from
(
select name,id from A
union all
select name,id from B) as c
group by id
相似回答