2010-05-23 8 views
5

ich eine Datenbanktabelle von Spiel-Ergebnisse voller Spiel und wollen wissen, ob ich folgendes berechnen:MySQL Volleyball Tabellen

  • GP (Spiele gespielt)
  • Siege
  • Verliert
  • Punkte (2 Punkte für jeden Sieg, 1 Punkt für jeden verlieren)

Hier sind meine Tabellenstruktur:

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 ; 

Und noch ein paar Testergebnisse:

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); 

Hier ist, was eine endgültige Tabelle wie folgt aussehen würde (Ergebnisse sind nicht ganz korrekt):

+-------------------+----+------+-------+--------+ 
| 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 | 
+-------------------+----+------+-------+--------+ 

WHERE-Klausel hinzufügen müssen für

tcl_id
wie folgt:

WHERE results.tcl_id = 68

Vielen Dank im Voraus.

Antwort

8

Dies sollte das tun, was Sie wollen:

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 

Ausgang für Ihre Beispieldaten:

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

Hinweise:

  • Ihr Beispiel Daten scheint nicht mit dem übereinstimmen erwartete Ausgabe - Ihre Testdaten haben nur 6 Spiele gespielt, aber Ihre erwartete Ausgabe hat 8 Spiele. Aus diesem Grund unterscheidet sich meine Ausgabe von Ihrer.
  • Sie haben die Tabelle zum Abrufen der Teamnamen aus den Team-IDs nicht bereitgestellt. Verbinden Sie sich einfach mit Ihrer Tabelle mit den Teamnamen, um das Ergebnis in dem von Ihnen gewünschten Format zu erhalten.
+0

Vielen Dank Herr. Du lässt es so einfach aussehen, aber ich bin mir sicher, dass andere dieses Problem schon einmal hatten. Eine Frage, ich habe der 'teams'-Tabelle kein Problem gemacht, aber ich muss der WHERE-Klausel etwas hinzufügen und mir einen Fehler geben. In der Tabelle 'results' gibt es ein weiteres Feld namens' tcl_id' ('results'.tcl_id'). Ich muss hinzufügen WHERE 'tcl_id' =" 68 ", aber es gibt mir diesen Fehler: # 1054 - Unbekannte Spalte 'results.tcl_id' in 'Where-Klausel' Ich bin mir nicht sicher, was das Problem ist ... ist es die UNION, die es mir nicht erlaubt, auf die "Ergebnistabelle" zuzugreifen, wie es ist? – Torez

+0

@Torez: Ersetzen Sie 'FROM Ergebnisse mit' FROM Ergebnisse WHERE tcl_id = '68' in ** beide ** Orte und es sollte funktionieren. –

+0

Was verwenden Sie, um Ihre SQL zu formatieren? (Entschuldigung dafür, dass ich nicht zum Thema bin). – unutbu