mysql - CASE 语句未正确添加

标签 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

简单概述一下我想要完成的任务。每赢一场得三分,平一场得一分,输一场得零分。我想把它们全部加起来。我将其设置为每行的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/

相关文章:

mysql - PhpStorm - 如何通过 Docker 连接到 MySQL

java - mybatis DateTypeHandler无法将java Date转换为sql TIMESTAMP

mysql - 左连接不存在

MySQL COUNT 值作为列

php - 如何使用循环连接 MySQL 日期类型和 PHP 日期类型

mysql - 同一张表上的多个 order by

mysql 将同一行上的 2 个时间戳列与搜索范围进行比较

mysql - sql测试条件如果失败转移到下一个人

mysql - 如何缓存流行查询以避免出现斯塔德斯和空白结果

mysql - SQL,选择超过 30 天的条目,过滤超过 30 天且在最近 30 天内有条目的条目