此问题在此处已有答案:
Fetch the rows which have the Max value for a column for each distinct value of another column(35个答案)
Retrieving the last record in each group - MySQL(34个答案)
24天前关闭。
我有一个数据库,里面有几个表,里面有我和朋友玩的游戏的分数和其他统计数据。
我想找到赢家(最高分)的每一场比赛的基础上,无论我们正在寻找的Map名称。
两个相关的表格如下所示(大幅缩减):
matches:
+----------------+---------+
| match_id | mapname |
+----------------+---------+
| 20200828205505 | jul16 |
| 20200909214044 | jul16 |
| 20200909214901 | jul16 |
| 20200917233839 | jul16 |
| 20200923225809 | jul16 |
+----------------+---------+
players:
+----------------+-----------------+-------+
| match_id | player_name | score |
+----------------+-----------------+-------+
| 20200917233839 | Player1 | 11 |
| 20200917233839 | Player2 | 25 |
| 20200923225809 | Player2 | 27 |
| 20200923225809 | Player3 | 19 |
| 20200923225809 | Player1 | 15 |
+----------------+-----------------+-------+
字符串
在matches中,match_id是唯一的(它只是日期),但是对于给定的match_id,玩家显然会有多行。
因此,对于给定的mapname,我想找到每个match_id,并且只检索在每个match_id中得分最高的player_name,例如,每场比赛的赢家。使用上面的方法,Player 2赢得了两场比赛。最终,我试图得到每个玩家在给定Map中的获胜总数。
简而言之,根据jul 16的Map,如果我有5个match_id,我希望每个都能得到最高分。我已经尝试了一些joins的方法,但我不知道如何找到(最高分数)。我希望这可以在一次选择中完成,这样我就不必手动编写代码了/如果我做错了,我很想知道其他的选择!
所有的帮助都非常感谢。
我能得到的最接近的结果是使用join语句,但它只给我一个结果(限制为1),而不是示例中的五个匹配。
1条答案
按热度按时间8cdiaqws1#
您可以通过使用ROW_NUMBER()窗口函数和公共表表达式(CTE)的组合来实现这一点,以便在每场比赛中对球员的得分进行排名。
字符串
此查询将给予您指定Map上每场比赛的赢家(最高得分者)。如果您想获得特定Map上每个玩家的总获胜次数,则可以进一步汇总结果。