テーブルにそれ自体に参加してアウター結合を使用することなく、各ユーザーの勝利と損失を計算するには、勝利と損失を個別に選択し、それらの間で組合をすべて行うことができますが、追加情報が与えられた場合は、行が勝利を表している場合は追加情報を使用することができますユーザー、または損失。
次に、各ユーザーのすべての勝利と損失を簡単に計算できます。トリッキーな部分は、プロファイルを比較したいユーザーを指定するオプションを組み込むことでした。の値に設定された変数でそれをしました percentage
与えられたユーザーの user_id
, 、定数から変数に変更できます。
これが私の提案です(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
;
出力:
ID_USER WINS LOSSES TOTAL PERCENT 6 8 2 10 0.8 9 6 1 7 0.8571
もちろん、プロファイルが比較のベースであるユーザーを削除することができます。 player_id != 6
(または、最終的な解決策では、いくつかの可変名)条件が最も外側に WHERE
句。
SQLFiddleの例: 一致プロファイル - 例
これがあなたが探していたものである場合、フィードバックを提供できますか?