CASE语句无法正确添加

时间:2015-09-16 15:37:21

标签: mysql

所以我一直在努力提高我的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,我还是有点磨练,所以任何帮助都会很好,我真的在努力提高自己的技能水平。如果您需要任何澄清或更多信息,请询问!谢谢你提前帮助!

1 个答案:

答案 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 ;

将返回每位玩家的记录。