多个表上的SQL Count(*)

时间:2010-01-01 08:34:10

标签: sql count

我正在写一个赛马网络应用程序,我有一个统计页面。我想做的是显示每年有多少获奖者。

目前我有这个:

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;

但它只是在表格底部返回额外的结果,所以我现在每匹马都有2行

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

有人能帮助我吗

由于

1 个答案:

答案 0 :(得分: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;