Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用IF语句计算MySQL中的行数?_Mysql_Sql - Fatal编程技术网

如何使用IF语句计算MySQL中的行数?

如何使用IF语句计算MySQL中的行数?,mysql,sql,Mysql,Sql,我有一个相对简单的问题,但我一直在写一个适当的SQL查询来显示我需要的结果。我有一个存储比赛结果的表,其中的列表示参加比赛的球员的ID、获胜者,另一个布尔列表示我是否希望将该比赛包括在结果中。因此,这些列是: player1_id | player2_id | winner_id | use 因此,winner\u id是前两列之一的值,取决于哪个玩家赢了。如果我想计算某个玩家仅使用use标志所在的行赢得游戏的次数,我可以使用以下工具轻松计算: SELECT COUNT(*) AS total

我有一个相对简单的问题,但我一直在写一个适当的SQL查询来显示我需要的结果。我有一个存储比赛结果的表,其中的列表示参加比赛的球员的ID、获胜者,另一个布尔列表示我是否希望将该比赛包括在结果中。因此,这些列是:

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(*)
?这是统计记录的自然方式。只有在需要空检测时(例如,在外部联接中),才可以计算列。。。谢谢你的更正。在这种情况下,对特定列进行计数是不相关的。我会更正我的答案。