在Snowflake中选取某列值最大的单条记录
解决方案
直接筛选目标记录
你的需求是精准匹配Name='Mike'且Score=79的行,最直接的写法就是用WHERE子句过滤:
SELECT Name, Score FROM your_table WHERE Name = 'Mike' AND Score = 79;
为什么你之前的写法不对
你之前用GROUP BY Name, Score加聚合函数的思路偏离了需求:
GROUP BY Name, Score会把每个不同的(Name, Score)组合单独分组,最终得到三条分组结果,而非你要的单行记录。COUNT(Name)和greatest(Score)属于多余的聚合操作,你不需要统计数量或找最大值,只是要匹配特定值的行。
补充:如果是要找每个用户的最高得分记录
如果你实际需求是找出每个Name对应的最高Score的那条记录(比如Mike的最高得分79的行),可以用窗口函数RANK()或ROW_NUMBER()实现:
WITH ranked_scores AS ( SELECT Name, Score, RANK() OVER (PARTITION BY Name ORDER BY Score DESC) AS score_rank FROM your_table ) SELECT Name, Score FROM ranked_scores WHERE score_rank = 1;
这个写法会给每个用户的得分按从高到低排名,筛选出排名第一的行。如果有多个相同最高得分的行,RANK()会返回所有并列第一的行;若只想要其中一行,可换成ROW_NUMBER()。
内容的提问来源于stack exchange,提问作者gmelgkermglermgmrelkgm
相关产品推荐
相关产品推荐

