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

基于指定规则实现数据表分组与排名的SQL查询求助

实现符合规则的SQL排名

根据你描述的规则,这里提供两种针对性的SQL实现,对应不同的排名逻辑场景:

场景1:每个(headerId, iscacId)组合为独立组,组内按金额降序排名

如果规则核心是将headerId+iscacId的每个组合视为独立单元,单元内按paymentAmt降序计算排名,直接使用窗口函数的PARTITION BY即可实现:

SELECT
    headerid,
    iscacId,
    paymentAmt,
    -- 使用RANK()会保留相同金额的并列排名,若需要连续无并列的排名用ROW_NUMBER()
    RANK() OVER (PARTITION BY headerid, iscacId ORDER BY paymentAmt DESC) AS `Rank`
FROM your_table;

场景2:同一headerId下,先按iscacId组的最高金额排组,组内再按金额排记录

如果规则5的核心是同一headerId下,先把不同iscacId的组按组内最高金额降序排序,再在每个组内按paymentAmt降序生成连续排名,可借助子查询实现:

SELECT
    headerid,
    iscacId,
    paymentAmt,
    ROW_NUMBER() OVER (
        PARTITION BY headerid
        ORDER BY (
            -- 子查询获取当前组的最高金额,用于组的排序
            SELECT MAX(paymentAmt) 
            FROM your_table t2 
            WHERE t2.headerid = t.headerid AND t2.iscacId = t.iscacId
        ) DESC,
        paymentAmt DESC
    ) AS `Rank`
FROM your_table t
ORDER BY headerid, `Rank`;

补充说明

  • 若需要调整并列排名规则,可替换窗口函数:
    • RANK():相同金额的记录排名相同,后续排名会跳过对应位数(如1,1,3)
    • DENSE_RANK():相同金额的记录排名相同,后续排名不跳过(如1,1,2)
    • ROW_NUMBER():即使金额相同,每条记录也会获得唯一的连续排名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:23:37