mysql - 选择另一个 ID 数量最多的 ID

标签 mysql sql count

我有一个棒球比赛数据库,其中包含 PlayerID 和 TypeID(比赛类型: double 、三振等)。数据看起来像这样:

+----------+--------+
| playerid | typeid |
+----------+--------+
|        2 |      4 |
|        2 |      4 |
|        2 |      7 |
|        3 |      7 |
|        3 |      7 |
|        3 |      7 |
|        3 |     26 |
|        3 |      7 |

我试图找出哪些玩家在每种游戏中玩得最多。例如。 Jim (PlayerID 3) 的三振次数最多 (TypeID 7),Bob (PlayerID 2) 的本垒打最多 (TypeID 4),结果应如下表所示:

+----------+--------+----------------+
| playerid | typeid | max(playcount) |
+----------+--------+----------------+
|        2 |      4 |             12 |
|        3 |      7 |              9 |
|        3 |     26 |              1 |

到目前为止我最好的尝试是运行:

SELECT playerid,typeid,MAX(playcount) FROM 
(
SELECT playerid,typeid,COUNT(*) playcount FROM plays GROUP BY playerid,typeid
) AS t GROUP BY typeid;

它返回每种类型的正确最大值,但关联的 PlayerID 都是错误的,我不明白为什么。我确信我错过了一些简单的东西(或者使它变得过于复杂),但无法弄清楚。有什么想法吗?

最佳答案

在 MySQL 中,这个 group=wise max 遗憾的是它并不像你想要的那样简单。

这是一种使用类似于 ROW_NUMBER() in MySQL 中建议的方法来完成此操作的方法。

SELECT a.*
  FROM (
        SELECT playerid
              ,typeid
              ,COUNT(*) playcount 
          FROM plays 
         GROUP BY playerid,typeid
        ) a
  LEFT JOIN
        (
        SELECT playerid
              ,typeid
              ,COUNT(*) playcount 
          FROM plays 
         GROUP BY playerid,typeid
        ) b
    ON a.typeid = b.typeid
   AND a.playcount < b.playcount
WHERE b.playerid IS NULL

关于mysql - 选择另一个 ID 数量最多的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30858161/

相关文章:

MySql - 从一列中随机选择 4 个数据 2 个不同的唯一值

mysql - 从连接表中选择与所有选定行匹配的行

mysql - 如何使用 MySQL Workbench 知道表中有多少行或对象?

Mysql更改字段中的id是另一个字段= "transfer"

mysql - 从子查询接收的值列表中选择,可能为空

sql - 根据特定值从sql表中检索行

mysql - 在 SQL 查询问题中计数

具有多个查询的 php/mysql

sql - PostgreSQL 不同的行与一列中的不同值的计数连接

mysql - sql 查询需要建议。需要统计某首歌在音乐节中播放的时间以及在决赛中获胜的次数