|
测试脚本如下:
CREATE TABLE ORDERS
(
ORDER_ID NUMBER(12),
ORDER_DATE DATE,
CUSTOMER_ID NUMBER(6)
);
CREATE TABLE ORDER_ITEMS
(
ORDER_ID NUMBER(12),
LINE_ITEM_ID NUMBER(3),
PRODUCT_ID NUMBER(6),
UNIT_PRICE NUMBER(8,2),
QUANTITY NUMBER(8)
);
insert into orders(order_id,order_date,customer_id) values(1,sysdate,2);
insert into orders(order_id,order_date,customer_id) values(2,sysdate,2);
insert into orders(order_id,order_date,customer_id) values(5,sysdate,3);
insert into orders(order_id,order_date,customer_id) values(6,sysdate,3);
insert into orders(order_id,order_date,customer_id) values(7,sysdate,3);
commit;
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(1,1,1,20,2);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(1,2,2,30,3);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(1,3,3,10,5);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(2,1,1,20,5);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(2,2,3,10,6);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(5,1,1,20,6);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(5,2,2,30,8);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(6,1,1,20,6);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(6,2,2,30,7);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(7,2,3,10,9);
insert into order_items(order_id,line_item_id,product_id,unit_price,quantity) values(7,3,4,40,2);
commit;
SELECT O.CUSTOMER_ID,
OI.PRODUCT_ID,
SUM(OI.UNIT_PRICE * OI.QUANTITY) "TOTAL"
FROM ORDER_ITEMS OI
JOIN ORDERS O
ON OI.ORDER_ID = O.ORDER_ID
WHERE MONTHS_BETWEEN(ORDER_DATE, SYSDATE) <= 6
GROUP BY ROLLUP(O.CUSTOMER_ID, OI.PRODUCT_ID);
结果如下:
CUSTOMER_ID PRODUCT_ID TOTAL
------------------------------------------------
2 1 140
2 2 90
2 3 110
2 340
3 1 240
3 2 450
3 3 90
3 4 80
3 860
1200
根据题意应该还要展示出根据PRODUCT_ID的汇总信息,选项似乎并不符合题意
应该改成group by grouping sets((customer_id,product_id),customer_id,product_id,1) 才对吧? |
|