所以我一直在努力提高我的 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
简单概述一下我想要完成的任务。每赢一场得三分,平一场得一分,输一场得零分。我想把它们全部加起来。我将其设置为每行的player__id为1,它给了我正确的结果10,但是当我在最后一行切换player__id和对手__id时,它失败了,只给了我6的计数。所以它没有甚至计算最后一行。
当涉及到 MYSQL 时,我仍然有点不懂,所以任何帮助都会很好,我真的正在努力提高我的技能水平。如果您需要任何说明或更多信息,请询问!感谢您提前提供的所有帮助!
最佳答案
问题出在代码的最后一行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 ;
将返回每个玩家的记录。
关于mysql - CASE 语句未正确添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32613034/