基于指定规则实现数据表分组与排名的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
相关产品推荐
相关产品推荐

