MySQL MAX函数使用问题:获取matchday=8的最大total及对应idPlayer
解决MySQL MAX函数关联对应列的问题
嘿,这个问题我之前也踩过坑,特别典型!咱们先搞清楚为什么你原来的查询会出错:
当你执行 SELECT MAX(total), idPlayer FROM MD_board WHERE matchday=8 时,MySQL的规则是:使用聚合函数(比如MAX)但没有对非聚合列(这里是idPlayer)做GROUP BY的话,数据库会随机返回一个满足WHERE条件的idPlayer值,而不是和最大值对应的那个,所以才会出现max(total)正确但idPlayer不对的情况。
给你两个简单易懂的解决方案,完全不用复杂查询:
方案一:子查询先拿最大值,再匹配对应行
这个逻辑最直观,先找到matchday=8的最大total,再找出所有total等于这个值的行:
SELECT idPlayer, total FROM MD_board WHERE matchday = 8 AND total = (SELECT MAX(total) FROM MD_board WHERE matchday = 8);
如果有多个玩家在matchday=8时都拿到了相同的最大total,这个查询会返回所有符合条件的玩家,很实用。
方案二:排序后取第一行
把matchday=8的所有记录按total从大到小排序,取第一行就是你要的结果:
SELECT idPlayer, total FROM MD_board WHERE matchday = 8 ORDER BY total DESC LIMIT 1;
这个写法更简洁,适合只需要一个结果(比如确定只有一个最大值的情况)的场景。
内容的提问来源于stack exchange,提问作者user9208388
相关产品推荐
相关产品推荐

