MySQL技术问询:按指定条件筛选含rank列最大值的行
MySQL查询指定条件下rank最大的行
你的原SQL语句存在语法逻辑问题:HAVING MAX(rank)的写法不正确,HAVING子句需要配合聚合条件(比如HAVING MAX(rank) = ...),且在未使用GROUP BY的情况下,这样的写法无法正确筛选目标行。
以下是几种正确的实现方式:
子查询匹配最大rank值
先通过子查询获取符合条件的最大rank,再筛选对应行,适合存在多个相同最大rank值的场景,会返回所有符合条件的行:SELECT * FROM mytable WHERE apply = 17 AND result > 0 AND rank = ( SELECT MAX(rank) FROM mytable WHERE apply = 17 AND result > 0 );ORDER BY + LIMIT
如果rank值唯一,可通过排序后取第一行,写法更简洁:SELECT * FROM mytable WHERE apply = 17 AND result > 0 ORDER BY rank DESC LIMIT 1;窗口函数(MySQL 8.0+)
使用窗口函数给行排名,筛选排名第一的行,同样支持多个相同最大rank的场景:SELECT * FROM ( SELECT *, RANK() OVER (ORDER BY rank DESC) AS rnk FROM mytable WHERE apply = 17 AND result > 0 ) t WHERE rnk = 1;
内容的提问来源于stack exchange,提问作者OUED
相关产品推荐
相关产品推荐

