2017-02-14 3 views
-1

Ich habe eine relativ einfache Frage, aber ich bin dran mit dem Schreiben einer richtigen SQL-Abfrage, um die Ergebnisse anzuzeigen, die ich brauche. Ich habe eine Tabelle, die Ergebnisse von Übereinstimmungen mit Spalten speichert, die die IDs der Spieler angeben, die an der Übereinstimmung teilgenommen haben, den Gewinner und eine andere boolesche Spalte, die sagen lässt, ob ich diese Übereinstimmung in das Ergebnis aufnehmen möchte oder nicht. So sind die Säulen sind:Wie zähle ich Zeilen in MySQL mit einer IF-Anweisung?

player1_id | player2_id | winner_id | use 

So winner_id ist der Wert von einem der ersten beiden Spalten in Abhängigkeit von dem Spieler gewonnen. Wenn ich zählen mag, wie oft ein bestimmte Spieler ein Spiel gewonnen nur die Zeilen mit denen die use Fahne ist, kann ich leicht tun mit:

SELECT COUNT(*) AS total, winner_id 
FROM table 
WHERE use = 1 
GROUP BY winner_id 
ORDER BY total DESC 

Allerdings habe ich auch die gleiche Zählung tun wollen, aber für die Spieler, die ihre Spiele verloren haben. Mit anderen Worten möchte ich nicht durch die winner_id gruppieren, sondern durch die Verlierer-ID, die der Wert von player1_id oder player2_id je nachdem, welche von ihnen von der winner_id ist. Irgendwelche Hinweise, wie man das mit einer einfachen Abfrage macht, die funktioniert?

+1

Bearbeiten Sie Ihre Frage und Beispieldaten und die gewünschten Ergebnisse liefern. –

+0

Schreckliches Tischdesign - 1. Col.-Sieger, 2. Col-Gegner. – user3741598

+0

Nicht argumentieren, dass es ein gutes Tischdesign ist, aber einige Matches werden zwischen zwei Spielern gesetzt, ohne im Voraus zu wissen, wer gewinnen wird. – mmvsbg

Antwort

2

Sie mögen dies tun können, um die loosers zählen:

SELECT 
    COUNT(*) AS total, 
    IF(player1_id = winner_id, player2_id, player1_id) AS looser_id 
FROM table 
WHERE use = 1 
GROUP BY looser_id 
ORDER BY total DESC 
+0

Gute Antwort, aber warum empfehlen Sie, 'COUNT (*)' nicht zu verwenden? Dies ist der natürliche Weg, um Datensätze zu zählen. Sie würden stattdessen nur eine Spalte zählen, wenn Sie eine NULL-Erkennung wünschen (z. B. in einem äußeren Join). –

+0

Du hast recht Thorsten ... danke für die Korrektur. Das Zählen einer bestimmten Spalte ist in diesem Fall nicht relevant. Ich werde meine Antwort korrigieren. –

+0

Funktioniert gut, Prost! – mmvsbg

Verwandte Themen