如何实现MySQL组合多个COUNT()和GROUP BY的查询

How to achieve MySQL Query combining multiple COUNT() and GROUP BY

所以我有这种类型的数据:

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

我知道如何与 user_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(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

Fiddle 在这里:http://sqlfiddle.com/#!9/00ac7/8