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

如何用单条SQL语句计算ranking≤当前行的item累加和?

单条SQL实现ranking累计求和需求

针对你的Test表,要计算每个ranking对应的所有ranking小于等于当前值的item总和,可以用以下两种单条SQL方案,无需存储过程或临时表:

方法一:使用窗口函数(推荐,高效)

适用于SQL Server 2008及以上版本,利用SUM() OVER()窗口函数实现累计求和:

-- 按ranking分组后展示累计结果
SELECT 
    ranking,
    SUM(total_item) OVER (ORDER BY ranking ASC) AS cumulative_item_sum
FROM (
    -- 先统计每个ranking的item总和
    SELECT 
        ranking,
        SUM(item) AS total_item
    FROM Test
    GROUP BY ranking
) AS ranked_totals
ORDER BY ranking DESC;

如果需要保留原表每一行数据,并显示对应行的累计和:

SELECT 
    item,
    ranking,
    SUM(item) OVER (ORDER BY ranking ASC) AS cumulative_item_sum
FROM Test
ORDER BY ranking DESC;

方法二:自连接方式(兼容低版本SQL Server)

通过自连接匹配所有ranking小于等于当前值的行,再求和:

SELECT 
    t1.ranking,
    SUM(t2.item) AS cumulative_item_sum
FROM Test t1
INNER JOIN Test t2 ON t2.ranking <= t1.ranking
GROUP BY t1.ranking
ORDER BY t1.ranking DESC;

测试结果示例

基于你提供的测试数据,以上方案都会输出:

rankingcumulative_item_sum
310
25
11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:22:32