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

如何在DENSE_RANK分区排名中跳过前10条并按州取50条?

可行,以下是具体实现方案

方案1:基于你已有的DENSE_RANK()实现

因为DENSE_RANK()会对相同人口的记录赋予相同排名,若要跳过每个州排名前10的记录(包含并列第10的所有记录),同时每个州最多保留50条,可在外层查询添加过滤条件:

SELECT *
FROM (
    SELECT 
        state,
        population,
        -- 你的原有排名逻辑
        DENSE_RANK() OVER (PARTITION BY state ORDER BY population DESC) AS ranking
    FROM your_table_name
) ranked_data
-- 跳过前10名,取后续最多50条
WHERE ranking > 10 AND ranking <= 60;

⚠️ 注意:如果存在多条记录并列第10名,DENSE_RANK()会让这些记录的ranking均为10,过滤ranking>10会跳过所有并列第10的记录。这种情况下,最终每个州返回的记录数可能不严格等于50条——比如第11名有多个并列时结果会超过50;若前10名包含大量并列,后续可用记录不足50时结果会少于50。

方案2:用ROW_NUMBER()精确控制记录数

如果需要严格跳过前10条、每个州恰好保留50条(不受人口并列影响),建议改用ROW_NUMBER(),它会给每个分区内的记录赋予唯一序号:

SELECT *
FROM (
    SELECT 
        state,
        population,
        ROW_NUMBER() OVER (PARTITION BY state ORDER BY population DESC) AS row_num
    FROM your_table_name
) numbered_data
-- 跳过前10条,取第11到第60条(共50条)
WHERE row_num BETWEEN 11 AND 60;

这个方案能保证每个州返回恰好50条记录(若该州总记录数≥60;若总记录数不足60,则返回从第11条到末尾的所有记录)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:20:32