2009-08-12 162 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