所以我一直在努力提高我的MYSQL和SQL技能,所以我要建立一个瑞士系统锦标赛软件程序。目前我正在考虑计算一个球员比赛获胜总数,以便稍后进行决胜局计算。我在MYSQL中完成大部分批量工作,因为以这种方式控制所有数据管理更容易。
这是表格和功能
#round_match的结果集
+----+-----------+------------+--------------+-----+------+------+---------+
| id | round__id | player__id | opponent__id | win | loss | draw | outcome |
+----+-----------+------------+--------------+-----+------+------+---------+
| 1 | 1 | 1 | 8 | 2 | 0 | 0 | 1 |
| 5 | 2 | 2 | 1 | 1 | 1 | 1 | 2 |
+----+-----------+------------+--------------+-----+------+------+---------+
#round
的结果集+----+-----------+--------+
| id | event__id | number |
+----+-----------+--------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
+----+-----------+--------+
现在我正在处理的查询会操纵这些数据以获得游戏胜率
查询
SELECT SUM(
CASE
WHEN rm.player__id = 1 THEN (rm.win*3)+rm.draw
WHEN rm.opponent__id = 1 THEN (rm.loss*3)+rm.draw
END
) as game_wins
FROM tournament.round_match rm
INNER JOIN tournament.round r ON rm.round__id = r.id AND r.event__id = 1
WHERE rm.player__id = 1
所以我只想快速概述一下我想要完成的事情。每场胜利都值三分,平局为1,亏损为0.我想将它们全部加起来。我把它设置为每行的player__id为1,它给了我10的正确结果,但是当我在最后一行切换player__id和opponent__id时它失败并且只给了我6的计数。所以它没有&#39 ; t甚至计算最后一行。
对于MYSQL,我还是有点磨练,所以任何帮助都会很好,我真的在努力提高自己的技能水平。如果您需要任何澄清或更多信息,请询问!谢谢你提前帮助!
答案 0 :(得分:1)
问题出在代码WHERE rm.player__id = 1
的最后一行。这只选择一条记录而不是所有记录。因此,将查询更改为
SELECT SUM(
CASE
WHEN rm.player__id = 1 THEN (rm.win*3)+rm.draw
WHEN rm.opponent__id = 1 THEN (rm.loss*3)+rm.draw
END
) as game_wins
FROM tournament.round_match rm
INNER JOIN tournament.round r ON.rm.round__id = r.id AND r.event__id = 1
GROUP BY rm.player__id ;
将返回每位玩家的记录。