【问题标题】:How to achieve MySQL Query combining multiple COUNT() and GROUP BY如何实现 MySQL Query 结合多个 COUNT() 和 GROUP BY
【发布时间】:2015-05-29 01:05:51
【问题描述】:

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

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 名玩家的损失?我知道这是可能的,但只是不知道如何执行它!有什么想法吗?

【问题讨论】:

    标签: mysql sql select count


    【解决方案1】:

    你想要条件聚合:

    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;
    

    【讨论】:

      【解决方案2】:

      我会这样做:

      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
      

      小提琴在这里:http://sqlfiddle.com/#!9/00ac7/8

      【讨论】:

      • 啊,我看到戈登已经回答了。请注意,并非所有数据库都支持他使用的条件聚合。但话又说回来,LIMIT 也不是。
      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      相关资源
      最近更新 更多