MySQL:统计各获胜者总场次及最后一次获胜后未获胜场次
解决方法
要实现您的需求,我们需要在统计获胜次数的基础上,额外计算每个获胜者最后一次获胜后到最后一场比赛之间的未获胜场次。具体可以通过以下步骤完成:
1. 核心逻辑拆解
- 先获取整个表中最后一场比赛的编号(也就是最大的
game值)。 - 对每个获胜者,找到他们最后一次获胜的比赛编号(即该获胜者对应的最大
game值)。 - 未获胜场次 = 最后一场比赛编号 - 该获胜者最后一次获胜的比赛编号。
2. 完整SQL查询语句
SELECT CONCAT( winner, '获胜', COUNT(*), '场,但最后', (SELECT MAX(game) FROM tablename) - MAX(game), '场未获胜' ) AS result FROM tablename GROUP BY winner;
3. 结果说明
针对您提供的示例数据,执行上述语句后会得到:
- Mark获胜2场,但最后5场未获胜
- Joe获胜2场,但最后1场未获胜
- Paula获胜3场,但最后2场未获胜
- Anna获胜1场,但最后0场未获胜
关于Mark场次的说明
您期望Mark的未获胜场次是6场,这可能是对“未获胜场次”的定义不同:
- 如果您希望将最后一次获胜的场次也计入(尽管该场次是获胜的),可以将计算式改为
(SELECT MAX(game) FROM tablename) - MAX(game) + 1,这样Mark的结果就会是6场。
4. 分步解释
COUNT(*):统计每个获胜者的总获胜场次,和您原来的查询逻辑一致。(SELECT MAX(game) FROM tablename):获取整个表的最后一场比赛编号(示例中是8)。MAX(game):获取当前获胜者最后一次获胜的比赛编号(比如Mark对应的是3)。CONCAT():将各部分拼接成您需要的自然语言描述格式。
内容的提问来源于stack exchange,提问作者Berry
相关产品推荐
相关产品推荐

