sql—根据总和选择10个最大的数据集,输出每个数据集的累计总和

x3naxklr  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(424)

假设数据集是:

Class    Value    Ordering
A        10       1
A        13       2
...
B        20       1
B        7        2
...

我希望能够找到总值最高的10个类,然后输出每个类的累积和。
到目前为止,我已经创建了一个脚本来确定最大的10个:

SELECT Class
FROM Table
GROUP BY Class
ORDER BY sum(Value) DESC
LIMIT 10;

以及一个脚本,用于查找特定类的累积和:

SELECT sum(Value) OVER (
       ORDER BY Ordering
       ROWS BETWEEN
           UNBOUNDED PRECEDING
           AND CURRENT ROW
       ) AS cumulativeSum
FROM Table
WHERE Class = 'A'
ORDER BY Ordering ASC;

但我找不到一种方法把这个过程结合起来
编辑:
假设a和b是最高级别中的两个,则输出为:

A    B
10   20
23   27

如果c类不是10个最大的类之一,它就不会被输出

wlsrxk51

wlsrxk511#

如果我没弄错,你可以:

select class, value, ordering, cumulativeSum
from (
    select
        t.*,
        rank() over(order by totalsum desc) rn
    from (
        select 
            t.*, 
            sum(value) over(partition by class order by ordering) cumulativeSum,
            sum(value) over(partition by class) totalsum
        from table t
    ) t
) t
where rn <= 10
order by class, ordering

这将过滤前10名的表 class 总的来说 value ,并将每个 class 到每一行。

相关问题