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

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

假设数据集是:

  1. Class Value Ordering
  2. A 10 1
  3. A 13 2
  4. ...
  5. B 20 1
  6. B 7 2
  7. ...

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

  1. SELECT Class
  2. FROM Table
  3. GROUP BY Class
  4. ORDER BY sum(Value) DESC
  5. LIMIT 10;

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

  1. SELECT sum(Value) OVER (
  2. ORDER BY Ordering
  3. ROWS BETWEEN
  4. UNBOUNDED PRECEDING
  5. AND CURRENT ROW
  6. ) AS cumulativeSum
  7. FROM Table
  8. WHERE Class = 'A'
  9. ORDER BY Ordering ASC;

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

  1. A B
  2. 10 20
  3. 23 27

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

wlsrxk51

wlsrxk511#

如果我没弄错,你可以:

  1. select class, value, ordering, cumulativeSum
  2. from (
  3. select
  4. t.*,
  5. rank() over(order by totalsum desc) rn
  6. from (
  7. select
  8. t.*,
  9. sum(value) over(partition by class order by ordering) cumulativeSum,
  10. sum(value) over(partition by class) totalsum
  11. from table t
  12. ) t
  13. ) t
  14. where rn <= 10
  15. order by class, ordering

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

展开查看全部

相关问题