在 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;
例如,我的 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;