要计算每个用户的获胜和损失而无需加入表格并使用外部连接,可以单独选择获胜和损失,并在他们之间进行联合,但是如果给出的行代表胜利,则有其他信息用户或损失。
然后,很容易计算每个用户的所有胜利和损失。棘手的部分是将选项合并用于指定您要比较哪个用户的配置文件的选项。我以一个变量设置为 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的示例: 匹配配置文件 - 示例
如果您要寻找的是,您能提供一些反馈,如果没有,您会期望什么?