52

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

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

另一个相同,它从存档结果表中加载,但字段相同。

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

我如何将两者结合在一个查询中?(所以 group by 仍然可以正常工作)。我尝试使用 union all,但它不起作用。我错过了什么?

4

4 回答 4

100
SELECT tem.name, COUNT(*) 
FROM (
  SELECT name FROM results
  UNION ALL
  SELECT name FROM archive_results
) AS tem
GROUP BY name
ORDER BY name
于 2009-08-12T14:52:52.567 回答
11

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

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;
于 2009-08-12T20:06:12.020 回答
9

你的目标是...

  1. 计算两个表中“Bob Jones”的所有实例(例如)
  2. 要将“Bob Jones”的Results所有实例放在一行中,并将“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
于 2009-08-12T14:51:27.513 回答
0
select T1.name, count (*)
from (select name from Results 
      union 
      select name from Archive_Results) as T1
group by T1.name order by T1.name
于 2020-12-15T21:18:17.377 回答