You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询:如何获取每个国家query_score最高的前2条记录

SQL查询错误修正方案

原有代码的错误点

  • 表名引用错误:查询的表实际是maps_query,原有写法误写为maps_search
  • 排序逻辑错误:要取query_score最高的前2条,窗口函数的排序需要用降序desc,原有升序会得到得分最低的记录
  • 过滤条件逻辑错误:score_rank = 1 and score_rank=2逻辑不成立,同一行的rank不可能同时为1和2,应该用score_rank <=2
  • 语法冗余错误:子查询中row_number()外层多了多余的括号,外层select末尾多了多余的逗号
  • 输出字段不符:需求要输出query_score,原有写法错误查询了不需要的score_rank
  • 额外说明:你的需求没有用到map_time表,本次查询无需关联该表

正确的查询语句

SELECT 
    t1.country, 
    t1.search_query, 
    t1.query_score
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER(PARTITION BY country ORDER BY query_score DESC) AS score_rank 
    FROM maps_query
) t1
WHERE t1.score_rank <= 2

逻辑说明

  • 先通过子查询给每个国家的记录按query_score从高到低排序打排名标签
  • 外层过滤只保留每个国家排名前2的记录即可
  • 如果需要处理同分并列第2的场景,可以把ROW_NUMBER()换成RANK()或者DENSE_RANK(),根据你的实际业务需求调整即可

内容的提问来源于stack exchange,提问作者LLL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:48:02