如何结合multiple COUNT()和GROUP BY实现MySQL查询

如何结合multiple COUNT()和GROUP BY实现MySQL查询,mysql,sql,select,count,Mysql,Sql,Select,Count,所以我有这类数据: id date user_id result 1 2015-05-04 1 win 2 2015-05-06 1 loss 3 2015-05-09 2 loss 4 2015-05-10 2 win 5 2015-05-16 1 win

所以我有这类数据:

id      date            user_id    result
1       2015-05-04      1          win
2       2015-05-06      1          loss
3       2015-05-09      2          loss
4       2015-05-10      2          win
5       2015-05-16      1          win
我需要按大多数赢家对前4名用户进行排序。但我还需要得到这4位头号赢家的损失数字。因此,当我查询这个特定集合时,我会得到:

user    wins    losses
1       2       1
2       1       1
我知道如何通过使用以下工具与用户id一起获得胜利:

SELECT user_id, COUNT(id) AS wins FROM table WHERE result = 'win' GROUP BY user_id ORDER BY COUNT(id) DESC LIMIT 4

但是,如果使用相同的查询,我将如何获得前4名球员的损失?我知道这是可能的,但只是不知道如何执行它!有什么想法吗?

您想要条件聚合:

SELECT user_id, sum(result = 'win') AS wins, sum(result = 'loss') as losses
FROM table
GROUP BY user_id
ORDER BY wins DESC
LIMIT 4;

您需要条件聚合:

SELECT user_id, sum(result = 'win') AS wins, sum(result = 'loss') as losses
FROM table
GROUP BY user_id
ORDER BY wins DESC
LIMIT 4;

您需要条件聚合:

SELECT user_id, sum(result = 'win') AS wins, sum(result = 'loss') as losses
FROM table
GROUP BY user_id
ORDER BY wins DESC
LIMIT 4;

您需要条件聚合:

SELECT user_id, sum(result = 'win') AS wins, sum(result = 'loss') as losses
FROM table
GROUP BY user_id
ORDER BY wins DESC
LIMIT 4;

我会这样做:

SELECT user_id, 
  SUM(CASE WHEN result='win' THEN 1 ELSE 0 END) AS wins,
  SUM(CASE WHEN result='loss' THEN 1 ELSE 0 END) AS losses 
FROM table1 
GROUP BY user_id 
ORDER BY wins DESC
LIMIT 4

小提琴在这里:

我会这样做:

SELECT user_id, 
  SUM(CASE WHEN result='win' THEN 1 ELSE 0 END) AS wins,
  SUM(CASE WHEN result='loss' THEN 1 ELSE 0 END) AS losses 
FROM table1 
GROUP BY user_id 
ORDER BY wins DESC
LIMIT 4

小提琴在这里:

我会这样做:

SELECT user_id, 
  SUM(CASE WHEN result='win' THEN 1 ELSE 0 END) AS wins,
  SUM(CASE WHEN result='loss' THEN 1 ELSE 0 END) AS losses 
FROM table1 
GROUP BY user_id 
ORDER BY wins DESC
LIMIT 4

小提琴在这里:

我会这样做:

SELECT user_id, 
  SUM(CASE WHEN result='win' THEN 1 ELSE 0 END) AS wins,
  SUM(CASE WHEN result='loss' THEN 1 ELSE 0 END) AS losses 
FROM table1 
GROUP BY user_id 
ORDER BY wins DESC
LIMIT 4

小提琴在这里:

啊,我看戈登已经回答了。请注意,并非所有数据库都支持他使用的条件聚合。但是再说一遍,限制也不是。啊,我看戈登已经回答了。请注意,并非所有数据库都支持他使用的条件聚合。但是再说一遍,限制也不是。啊,我看戈登已经回答了。请注意,并非所有数据库都支持他使用的条件聚合。但是再说一遍,限制也不是。啊,我看戈登已经回答了。请注意,并非所有数据库都支持他使用的条件聚合。但是,同样的,
LIMIT