[英]Rollup - Oracle db sql
I have the below table我有下表
i want to aggregate and rollup the data to be displayed per below screenshot.我想根据下面的屏幕截图汇总和汇总要显示的数据。
How do i go about this, is it possible to exactly rollup this way?我该怎么做,是否可以以这种方式准确汇总?
I would use grouping sets
:我会使用
grouping sets
:
select fruit, type, sum(amount), sum(percent)
from t
group by grouping sets ( (fruit, type), (fruit) );
You can use the ROLLUP
and then necessary conditions to omit the extra generated rows as follows:您可以使用
ROLLUP
然后使用必要条件来省略额外生成的行,如下所示:
SQL> -- Sample data
SQL> WITH DATAA (FRUIT, TYPE, AMOUNT, PERCENT) AS
2 (
3 SELECT 'Apple', 'Green', 10017, 17 FROM DUAL UNION ALL
4 SELECT 'Orange', 'Green', 10016, 16 FROM DUAL UNION ALL
5 SELECT 'Papaya', 'Yellow', 10014, 14 FROM DUAL UNION ALL
6 SELECT 'Papaya', 'Blue', 10005, 5 FROM DUAL UNION ALL
7 SELECT 'Papaya', 'Green', 10012, 12 FROM DUAL
8 )
9 -- Your query starts from here
10 SELECT *
11 FROM (
12 SELECT FRUIT, TYPE, AMOUNT, SUM(PERCENT) AS PERCENT
13 FROM DATAA
14 GROUP BY ROLLUP(FRUIT, TYPE, AMOUNT)
15 )
16 WHERE ( FRUIT IS NOT NULL AND TYPE IS NOT NULL AND AMOUNT IS NOT NULL )
17 OR ( FRUIT IS NOT NULL AND TYPE IS NULL AND AMOUNT IS NULL )
18 ORDER BY FRUIT, TYPE DESC NULLS LAST;
FRUIT TYPE AMOUNT PERCENT
------ ------ ---------- ----------
Apple Green 10017 17
Apple 17
Orange Green 10016 16
Orange 16
Papaya Yellow 10014 14
Papaya Green 10012 12
Papaya Blue 10005 5
Papaya 31
8 rows selected.
SQL>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.