MySQL - 按分组结果分组

标签 mysql group-by

不确定如何最好地为问题命名。

我有一张记录玩家获胜的表格。我需要查询有多少玩家有多少胜利。

这是一个示例数据库:https://www.db-fiddle.com/f/gCEKmtPQr7nvhiZDyexn9C/0 这是预期的结果:

wins, players_count
1, 1
2, 3

我有点迷路了。我可以轻松获得每个玩家的获胜次数(按 user_id 分组,其中 status='win' 并选择计数),但如何将这些结果分组到我的预期结果中?

谢谢!

最佳答案

  • 您将需要使用带有Group By 的两级选择查询。子选择查询也称为 Derived Table .
  • 在内部选择查询中,获取每个用户的总获胜数。
  • 现在,在外部选择中,Group By 总获胜数,并计算他们的用户数。

尝试以下操作:

SELECT 
  dt.total_wins AS wins, 
  COUNT(*) AS players_count 
FROM 
(
  SELECT
    user_id, 
    COUNT(*) AS total_wins 
  FROM a 
  WHERE status = 'win' 
  GROUP BY user_id
) AS dt 
GROUP BY dt.total_wins 

模式(MySQL v5.7)

CREATE TABLE a (status VARCHAR(255), user_id int);

INSERT INTO a (status, user_id)
VALUES ('win', 1),
('win', 2),
('win', 3),
('win', 2),
('win', 4),
('win', 4),
('win', 1),
('not win', 1);

查询结果

| wins | players_count |
| ---- | ------------- |
| 1    | 1             |
| 2    | 3             |

View on DB Fiddle

关于MySQL - 按分组结果分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53072446/

相关文章:

sql - 计算行和列中值的频率 SQL

python - 限制 groupby Pandas 的行数

mysql - 无法将数据库连接到 phpmyadmin

javascript - 动态列表复选框问题

MySQL 建表脚本 TEXT data_type 语法

mysql - 计算 MySQL 表中时间戳内的天数

python - 将日期时间数组转换为字符串

如果另一列已更改,则 MySQL 按一列分组?

mysql - mySql的select语句

mysql - 使用多个 "WHERE IN"和 "OR"搜索 MySql 数据库不起作用