多个表上的SQL Count(*)

Gle*_*len 7 sql count

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

目前我有这个:

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

它就像一个魅力,并返回以下内容

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

我现在已经创建了一个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;
Run Code Online (Sandbox Code Playgroud)

但它只是在表格的底部返回额外的结果,所以我现在每只马有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
Run Code Online (Sandbox Code Playgroud)

有人能帮助我吗?

谢谢

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

  • 你想要UNION ALL,而不是UNION. (3认同)