Um Siege und Verluste jedes Benutzers zu berechnen, ohne sich der Tabelle an sich selbst zu verbinden und äußere Verknüpfungen zu verwenden der Benutzer oder ein Verlust.
Dann ist es einfach, alle Siege und Verluste für jeden Benutzer zu berechnen. Der schwierige Teil bestand darin, die Option zu berücksichtigen, welchen Benutzer Sie die Profile vergleichen möchten. Ich habe das mit einer Variablen gemacht, die auf den Wert von festgelegt ist percentage
des Benutzers mit gegebener user_id
, was Sie von einer Konstante zu einer Variablen ändern können.
Hier ist mein Vorschlag (im Vergleich zum Benutzer mit ID = 6):
SELECT
player_id AS id_user,
wins,
losses,
wins + losses AS total,
wins / (wins + losses) AS percent
FROM (
SELECT
player_id,
SUM(is_a_win) wins,
SUM(is_a_loss) losses,
CASE
WHEN player_id = 6
THEN @the_user_score := SUM(is_a_win) / (SUM(is_a_win) + SUM(is_a_loss))
ELSE NULL
END
FROM (
SELECT id_user_winner AS player_id, 1 AS is_a_win, 0 AS is_a_loss FROM user_versus
UNION ALL SELECT id_user_loser, 0, 1 FROM user_versus
) games
GROUP BY player_id
) data
WHERE
ABS(wins / (wins + losses) - @the_user_score) <= 0.1
;
Ausgabe:
ID_USER WINS LOSSES TOTAL PERCENT 6 8 2 10 0.8 9 6 1 7 0.8571
Sie können den Benutzer natürlich entfernen, dessen Profil die Basis zum Vergleich durch Hinzufügen ist player_id != 6
(oder in der endgültigen Lösung ein variabler Name) Bedingung bis zur äußersten WHERE
Klausel.
Beispiel bei SQLFIDDLE: Matching -Profile - Beispiel
Könnten Sie etwas Feedback geben, wenn Sie dies gesucht haben, und wenn nicht, welche Ausgabe würden Sie erwarten?