在 Derby 中排序后,如何在除前几行之外的整个列上使用聚合函数(如 sum 和 avg)

How to use aggregate function like sum and avg on entire column except first few rows after sorting in Derby

例如,我的 table 看起来像这样:

+---------------------+
| TOTAL  NUMBER  NAME |
+---------------------+
| 10        5       A |
| 5         8       A |
| 21        32      A |
| 7         3       A |
| 7         3       B |
| 11        5       B |
| 5         8       B |
| 21        32      B |
+---------------------+

按 NUMBER 排序后:

+---------------------+
| TOTAL  NUMBER  NAME |
+---------------------+
| 7         3       A |
| 7         3       B |
| 10        5       A |
| 11        5       B |
| 5         8       A |
| 5         8       B |
| 21        32      A |
| 21        32      B |
+---------------------+

我只想要按名称分组的每个组的前两行的总和:

A  7+10=17
B  7+11=18

它将是这样的:

select sum(total),name from
(select Total, name from 
table order by number where name = 'A' FETCH FIRST 2 ROWS ONLY 
 union select Total, name from 
table order by number where name = 'B' FETCH FIRST 2 ROWS ONLY )dt group by name

在派生中 table 将按列号排序选择前 2 个结果,外部查询将添加总值。

编辑:以下查询应该可以完成您的工作。

SELECT name,sum(total)
FROM   table s
WHERE 
        (
            SELECT  COUNT(*) 
            FROM    table t
            WHERE t.name = s.name AND 
                  t.number >= s.number
        ) <= 2
 group by name;