2010-01-01 72 views
7

Estoy escribiendo una aplicación web de carreras de caballos y tengo una página de estadísticas. Lo que intento hacer es mostrar cuántos ganadores hay cada año.SQL Count (*) en varias tablas

Actualmente tengo esto:

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

Funciona como un encanto y devuelve el siguiente

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 

ahora he creado una tabla para el año 2010 y estoy deseando SQL para devolver algo similar pero Quiero que busque en 2009 y 2010 al mismo tiempo. Pensé que algo como esto podría hacer el truco.

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; 

Sin embargo, sólo está generando resultados adicionales en la parte inferior de la mesa, así que ahora tienen 2 filas para cada caballo como éste

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 

¿Hay alguien capaz de ayudarme por favor

Gracias

+7

Almacenamiento del resultado en una tabla diferente para cada año no es la forma en que SQL. Debe usar una sola tabla con una columna anual con un índice en esa columna. Esto hará las cosas mucho más fáciles para ti. –

+0

Es por eso que las tablas por período no son para los no iniciados. –

Respuesta

10

En primer lugar, le sugiero tener UNA tabla con una columna extra durante un año.

En segundo lugar, con la estructura de la tabla actual, puede hacer

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

Funciona como un encanto. Muchas gracias – Glen

+3

Desea UNIÓN TODO allí, no UNIÓN. –

+0

Sí, de alguna manera suponía que las filas son únicas en 2 tablas, lo que podría ser falso. Corregido – DVK