2010-05-23 7 views
5

Tengo una tabla de base de datos completa de los juegos por los resultados del juego y me gustaría saber si puedo calcular lo siguiente:MySQL voleibol Clasificación

  • GP (juegos jugados)
  • Victorias
  • Pierde
  • puntos (2 puntos por cada victoria, 1 punto por cada perder)

Aquí está mi estructura de la tabla: 01

CREATE TABLE `results` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `home_team_id` int(10) unsigned NOT NULL, 
    `home_score` int(3) unsigned NOT NULL, 
    `visit_team_id` int(10) unsigned NOT NULL, 
    `visit_score` int(3) unsigned NOT NULL, 
    `tcl_id` int(3) unsigned NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; 

Y algunos resultados de pruebas:

INSERT INTO `results` VALUES(1, 1, 21, 2, 25, 68); 
INSERT INTO `results` VALUES(2, 3, 21, 4, 17, 68); 
INSERT INTO `results` VALUES(3, 1, 25, 3, 9, 68); 
INSERT INTO `results` VALUES(4, 2, 7, 4, 22, 68); 
INSERT INTO `results` VALUES(5, 1, 19, 4, 20, 68); 
INSERT INTO `results` VALUES(6, 2, 24, 3, 26, 68); 

Esto es lo que una mesa final sería algo como esto (los resultados no son del todo precisos):

+-------------------+----+------+-------+--------+ 
| Team Name   | GP | Wins | Loses | Points | 
+-------------------+----+------+-------+--------+ 
| Spikers   | 4 | 4 |  0 |  8 | 
| Leapers   | 4 | 2 |  2 |  6 | 
| Ground Control | 4 | 1 |  3 |  5 | 
| Touch Guys  | 4 | 0 |  4 |  4 | 
+-------------------+----+------+-------+--------+ 

necesidad de añadir cláusula WHERE para

tcl_id
como tal:

WHERE results.tcl_id = 68

Gracias de antemano.

Respuesta

8

Esto debería hacer lo que quiera:

SELECT 
    team_id, 
    COUNT(*) AS GP, 
    SUM(is_win) AS Wins, 
    SUM(NOT is_win) AS Losses, 
    2 * SUM(is_win) + SUM(NOT is_win) AS Points 
FROM 
(
    SELECT 
     home_team_id AS team_id, 
     home_score > visit_score AS is_win 
    FROM results 
    WHERE tcl_id = 68 
    UNION ALL 
    SELECT 
     visit_team_id AS team_id, 
     home_score < visit_score AS is_win 
    FROM results 
    WHERE tcl_id = 68 
) T1 
GROUP BY team_id 
ORDER BY Points DESC 

de salida para el ejemplo de datos:

4, 3, 2, 1, 5 
3, 3, 2, 1, 5 
1, 3, 1, 2, 4 
2, 3, 1, 2, 4 

Notas:

  • Sus datos de ejemplo no parece coincidir con su salida esperada: sus datos de prueba solo tienen 6 juegos jugados, pero su salida esperada tiene 8 juegos. Esta es la razón por la cual mi salida es diferente a la tuya.
  • No ha proporcionado la tabla para obtener los nombres de los equipos de los ID del equipo. Simplemente únase a su tabla con los nombres de los equipos para obtener el resultado en el formato que desee.
+0

Muchas gracias señor. Lo haces parecer tan simple, pero estoy seguro de que otros han tenido este problema antes. Una pregunta, me uní a la tabla 'teams' no hay problema, pero tengo que agregar algo a la cláusula WHERE y me da un error. En la tabla 'results' hay otro campo llamado' tcl_id' ('results' .tcl_id'). Necesito agregar WHERE 'tcl_id' =" 68 "pero me da este error: # 1054 - Columna desconocida 'results.tcl_id' en 'where clause' No estoy seguro de cuál es el problema ... es la UNIÓN que no me permite acceder a la tabla 'resultados' tal como está? – Torez

+0

@Torez: reemplace 'FROM results' con' FROM results WHERE tcl_id = '68'' en ** both ** places y debería funcionar. –

+0

¿Qué usas para formatear tu sql? (lo siento por estar fuera del tema). – unutbu

Cuestiones relacionadas