2010-01-01 29 views
7

我正在寫一個賽馬網絡應用程序,我有一個統計頁面。我想要做的是顯示每年有多少獲勝者。多個表上的SQL計數(*)

目前,我有這樣的:

SELECT `Horse Number`, Count(*) AS `Total Winners` 
FROM `races`.`2009` 
WHERE `Win $`>0 
GROUP BY `Horse Number` 
ORDER BY Count(*) DESC; 

它的工作原理就像一個魅力,並返回以下

Horse Number | Total Winners 
1|48 
2|49 
3|39 
4|31 
5|26 
6|31 
7|21 
8|25 
9|31 
10|16 
11|16 
12|20 
13|9 
14|8 
15|6 
16|3 
17|3 
18|2 
19|2 

我現在已經創建了一個表,2010年,我想SQL返回類似的東西,但我希望它能同時搜索2009年和2010年。 我認爲這樣的事情可能會訣竅。

SELECT `Horse Number`, Count(*) AS `Total Winners` 
FROM `races`.`2009` 
WHERE `Win $`>0 
GROUP BY `Horse Number` 
UNION 
SELECT `Horse Number`, Count(*) AS `Total Winners` 
FROM `races`.`2010` 
WHERE `Win $`>0 
GROUP BY `Horse Number` 
ORDER BY Count(*) DESC; 

但它只是在表的底部退回多餘的結果,所以我現在有兩排像這樣

Horse Number | Total Winners 
1|48 
2|49 
3|39 
4|31 
5|26 
6|31 
7|21 
8|25 
9|31 
10|16 
11|16 
12|20 
13|9 
14|8 
15|6 
16|3 
17|3 
18|2 
19|2 
1|0 
2|0 
3|0 
4|0 
5|0 
6|0 
7|0 
8|0 
9|0 
10|0 
11|0 
12|0 
13|0 
14|0 
15|0 
16|0 
17|0 
18|0 
19|0 

每匹馬有沒有人能幫助我,請

謝謝

+7

在不同的表,每年用於存儲你的結果是不是SQL的方式。您應該使用一個包含該列索引的年份列表。這會讓事情變得更容易。 – 2010-01-01 08:36:32

+0

這就是爲什麼per-period表不適用於外行。 – 2010-01-01 08:37:08

回答

10

首先,我建議有一張桌子和一年的額外專欄。

其次,當前的表結構,你可以做

SELECT `Horse Number`, Count(*) AS `Total Winners` 
FROM (
    SELECT * FROM `races`.`2009` 
    UNION ALL 
    SELECT * FROM `races`.`2010` 
) all_races 
WHERE `Win $`>0 
GROUP BY `Horse Number` 
ORDER BY Count(*) DESC; 
+0

工程就像一個魅力。 非常感謝 – Glen 2010-01-01 08:43:10

+3

你想UNION ALL,而不是UNION。 – 2010-01-01 08:59:19

+0

是的,在某種程度上假設行在兩個表中是唯一的,這可能是錯誤的。固定 – DVK 2010-01-01 09:06:58