现有一张表A id name1 name2 1 aa bb 2 aa cc 3 bb cc 4 aa dd ................. 需要统计每个名字出现的次数 希望得到的结果是 aa 3 bb 2 cc 2 dd 1
下面是具体的步骤,通过逐步分析来体现union all 的作用
------------------------------------------------------------------------------------
第一步:求name1的数据信息
select name1 name,count(*) num from dd group by name1 查询结果: name num aa 3 bb 1 ******************************** 第二步:求name2的数据信息
select name2 name,count(*) num from dd group by name2 查询结果: name num bb 1 cc 2 dd 1 ********************************** 第三步:把第一步和第二步的用union all结果结合起来
select name1 name,count(*) num from dd group by name1 union all select name2 name,count(*) num from dd group by name2 查询结果: name num aa 3 bb 1 bb 1 cc 2 dd 1 ***************************************** 最后在第三步的基础上再次搜索就可以得到结果 select name,sum(num) from (select name1 name,count(*) num from dd group by name1 union all select name2 name,count(*) num from dd group by name2) t
group by name ;
查询结果: name num
aa 3 bb 2 cc 2 dd 1
说明:如果用union而不是union all的话会取消重复的列