如何使用IF语句计算MySQL中的行数?
我有一个相对简单的问题,但我一直在写一个适当的SQL查询来显示我需要的结果。我有一个存储比赛结果的表,其中的列表示参加比赛的球员的ID、获胜者,另一个布尔列表示我是否希望将该比赛包括在结果中。因此,这些列是:如何使用IF语句计算MySQL中的行数?,mysql,sql,Mysql,Sql,我有一个相对简单的问题,但我一直在写一个适当的SQL查询来显示我需要的结果。我有一个存储比赛结果的表,其中的列表示参加比赛的球员的ID、获胜者,另一个布尔列表示我是否希望将该比赛包括在结果中。因此,这些列是: player1_id | player2_id | winner_id | use 因此,winner\u id是前两列之一的值,取决于哪个玩家赢了。如果我想计算某个玩家仅使用use标志所在的行赢得游戏的次数,我可以使用以下工具轻松计算: SELECT COUNT(*) AS total
player1_id | player2_id | winner_id | use
因此,winner\u id
是前两列之一的值,取决于哪个玩家赢了。如果我想计算某个玩家仅使用use
标志所在的行赢得游戏的次数,我可以使用以下工具轻松计算:
SELECT COUNT(*) AS total, winner_id
FROM table
WHERE use = 1
GROUP BY winner_id
ORDER BY total DESC
然而,我也想做同样的计算,但对那些输掉比赛的球员。换句话说,我不想按
winner\u id
分组,而是按loser id分组,loser id是player1\u id
或player2\u id
的值,这取决于其中哪一个与winner\u id
不同。关于如何使用一个简单有效的查询来实现这一点,有什么线索吗?你可以这样做来计算失败者:
SELECT
COUNT(*) AS total,
IF(player1_id = winner_id, player2_id, player1_id) AS looser_id
FROM table
WHERE use = 1
GROUP BY looser_id
ORDER BY total DESC
编辑您的问题并提供示例数据和期望的结果。糟糕的表格设计-第一栏冠军,第二栏对手。不认为这是一个好的表格设计,但有些比赛是在两名球员之间进行的,而事先不知道谁将获胜。为时间表分开表格;然后是结果表。查看数据规范化。答案很好,但为什么不建议使用
COUNT(*)
?这是统计记录的自然方式。只有在需要空检测时(例如,在外部联接中),才可以计算列。。。谢谢你的更正。在这种情况下,对特定列进行计数是不相关的。我会更正我的答案。