2009-08-12 294 views
28

我有一个SQL查询,看起来是这样的:使用UNION和COUNT(*)一起在SQL查询

select name, count (*) from Results group by name order by name 

和另一个相同,从一个归档结果表加载,但字段相同。

select name, count (*) from Archive_Results group by name order by name 

我该如何将这两者合并为一个查询? (所以小组依然会正常工作)。我尝试了所有的联合,但它不会工作。我错过了什么?

回答

53
select tem.name, count(*) 
from(select name from results 
union all 
select name from archive_results) as tem 
group by name 
order by name 
+2

谢谢。我所缺少的是“作为技术”的一部分...忘了我必须命名我创建的“桌子”才能使其工作。 – 2009-08-12 15:06:57

+5

这会给出错误的答案。实际上,每个名称都会计为1,因为UNION默认为UNION DISTINCT。 使用UNION ALL。 – 2009-08-12 19:59:48

+0

谢谢Steve Kass,但是我已经知道我需要使用UNION ALL。如上所述,我所缺少的是“as”一词。 – 2009-08-13 10:55:26

6

是你的目标?

  1. 要两个表中统计的“鲍勃·琼斯 ”的所有实例(例如)
  2. Results计数“鲍勃·琼斯 ”的所有实例在一排和 所有在单独一行 Archive_Results“鲍勃·琼斯”的情况?

假设它的#1,你想要的东西像...

SELECT name, COUNT(*) FROM 
(SELECT name FROM Results UNION ALL SELECT name FROM Archive_Results) 
GROUP BY name 
ORDER BY name 
7

如果你已经支持指数,以及相对较高的罪名,这样的事情可能比解决方案相当快建议:

SELECT name, MAX(Rcount) + MAX(Acount) as TotalCount 
FROM (
    SELECT name, count(*) as Rcount, 0 as Acount 
    FROM Results GROUP BY name 
    UNION ALL 
    SELECT name, 0, count(*) 
    FROM Archive_Results 
    GROUP BY name 
) AS Both 
GROUP BY name 
ORDER BY name; 
+0

仅供参考,我打'Both'作为保留字。 MySQL 5.1(btw) – Douglas 2013-08-03 01:24:36

+0

我认为,而不是维护两列,SUM(计数)将工作。 – Rana 2014-07-19 18:25:25