group by扩展函数的习题(读书笔记)
来源:互联网 发布:想给淘宝店铺取个名字 编辑:程序博客网 时间:2024/05/16 00:24
习题脚本:
/*题目:要求在每组order_book内,按日期升序排列(order_no排序不管),常规分组在前,小计在后,合计最后。
根据结果可以看出,对于book1来说,前4行就是标准分组,即*/
/*第5行小计可以看做是group BY order_book,然后横跨order_time,order_no列的小计,所以也就是*/
/*根据上面两点,可以想到组合列分组,ROLLUP(t.order_book,(t.order_date,t.order_no)),排序是ORDER BY order_book,order_date
即*/
/*最后结合grouping_id来分组*/
----------------结合上面的结果,使用decode进行报表格式化
DROP TABLE t;CREATE TABLE t(ORDER_date DATE,--订购日期 order_no NUMBER,--订购号 order_book VARCHAR2(10),--订购书籍 order_fee NUMBER,--订单总金额 order_num NUMBER--订单明细数目 );INSERT INTO tSELECT DATE '2010-5-1'+LEVEL,TRUNC(dbms_random.value*1000),'book1',100*LEVEL,LEVELFROM dualCONNECT BY LEVEL<5;INSERT INTO tSELECT DATE '2010-6-1'+LEVEL,TRUNC(dbms_random.value*1000),'book2',200*LEVEL,LEVELFROM dualCONNECT BY LEVEL<5;COMMIT;
/*题目:要求在每组order_book内,按日期升序排列(order_no排序不管),常规分组在前,小计在后,合计最后。
根据结果可以看出,对于book1来说,前4行就是标准分组,即*/
SELECT t.order_date ,t.order_no ,t.order_book ,SUM(t.order_fee) sum_order_fee ,SUM(t.order_num) sum_order_numFROM tGROUP BY t.order_book,t.order_date,t.order_noORDER BY order_book,order_date
/*第5行小计可以看做是group BY order_book,然后横跨order_time,order_no列的小计,所以也就是*/
SELECT NULL ,NULL ,t.order_book ,SUM(t.order_fee) sum_order_fee ,SUM(t.order_num) sum_order_numFROM tGROUP BY t.order_bookORDER BY order_book
/*根据上面两点,可以想到组合列分组,ROLLUP(t.order_book,(t.order_date,t.order_no)),排序是ORDER BY order_book,order_date
即*/
SELECT t.order_date ,t.order_no ,t.order_book ,SUM(t.order_fee) sum_order_fee ,SUM(t.order_num) sum_order_numFROM tGROUP BY ROLLUP(t.order_book,(t.order_date,t.order_no))ORDER BY t.order_book,t.order_date
/*最后结合grouping_id来分组*/
SELECT t.order_date ,t.order_no ,t.order_book ,SUM(t.order_fee) sum_order_fee ,SUM(t.order_num) sum_order_num ,grouping_id(t.order_date,t.order_no,t.order_book)FROM tGROUP BY ROLLUP(t.order_book,(t.order_date,t.order_no))ORDER BY t.order_book,t.order_date
----------------结合上面的结果,使用decode进行报表格式化
SELECT decode(grouping_id(t.order_date,t.order_no,t.order_book),6,order_book||'小计', 7,'合计', to_char(t.order_date,'yyyy-mm-dd')) order_date ,t.order_no ,decode(grouping_id(t.order_date,t.order_no,t.order_book),0,order_book, NULL) rder_book ,SUM(t.order_fee) sum_order_fee ,SUM(t.order_num) sum_order_numFROM tGROUP BY ROLLUP(t.order_book,(t.order_date,t.order_no))ORDER BY t.order_book,t.order_date
0 0
- group by扩展函数的习题(读书笔记)
- GROUP BY的扩展
- 分组函数GROUP BY的扩展使用总结
- group by 扩展函数实现报表的需求
- 用group by 扩展函数实现sqlplus的break功能
- Group By的扩展使用
- group by 字句的扩展+rollup字句+cube字句+grouping()函数
- group by 扩展函数之rollup
- group by扩展函数之cube
- group by 扩展函数之GROUPING SETS
- group by扩展函数之grouping
- group by扩展函数之grouping_id
- group by扩展函数之group_id
- oracle中group by的扩展
- Oracle的group by聚合函数扩展cube rollup和grouping sets
- Oracle的group by聚合函数扩展cube rollup和grouping sets
- Oracle的group by聚合函数扩展cube rollup和grouping sets
- Oracle中group by 的扩展函数rollup、cube、grouping sets
- Android学习及如何利用android来赚钱
- NYOJ-素数
- C++ primer 第五版 中文版 练习 10.1 个人code
- 4646464646464464564
- linux常用命令
- group by扩展函数的习题(读书笔记)
- Java设计模式 - 模板方法模式
- C++11 thread::detach(2)
- 语言中的0UL或1UL是什么意思?
- Java SE1.6中的Synchronized
- 贪心的人类
- uva 10340
- DataGird 相关
- linux常用命令,简单一些的