在SQL查询中一起使用union和count(*)

Dav*_*jak 40 sql union

我有一个SQL查询,看起来像这样:

select name, count (*) from Results group by name order by name
Run Code Online (Sandbox Code Playgroud)

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

select name, count (*) from Archive_Results group by name order by name
Run Code Online (Sandbox Code Playgroud)

如何在一个查询中将两者结合起来?(因此,群组仍将正常运作).我尝试使用union all,但是它不起作用.我错过了什么?

krd*_*zni 75

SELECT tem.name, COUNT(*) 
FROM (
  SELECT name FROM results
  UNION ALL
  SELECT name FROM archive_results
) AS tem
GROUP BY name
ORDER BY name
Run Code Online (Sandbox Code Playgroud)

  • 这将给出错误的答案.事实上,它会为每个名称计数1,因为UNION默认为UNION DISTINCT.使用UNION ALL. (6认同)
  • 谢谢.我所缺少的只是"as tem"部分...忘了我必须命名我创建的"表"才能使其工作. (2认同)
  • @Rekreativc:没问题。我发表评论是因为您将解决方案标记为最佳答案,并且我不希望未来的读者认为这是正确的答案。 (2认同)

Ste*_*ass 9

如果您有支持索引和相对较高的计数,这样的事情可能比建议的解决方案快得多:

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;
Run Code Online (Sandbox Code Playgroud)


Vot*_*ple 7

你的目标是......

  1. 计算两个表中"Bob Jones"的所有实例(例如)
  2. 要将Results一行中"Bob Jones"的所有实例和"Bob Jones"的所有实例统计 Archive_Results在一个单独的行中?

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

SELECT name, COUNT(*) FROM
(SELECT name FROM Results UNION ALL SELECT name FROM Archive_Results)
GROUP BY name
ORDER BY name
Run Code Online (Sandbox Code Playgroud)