在047考题中有以下这么一道考题

11.View the Exhibit and examine the descriptions of ORDER_ITEMS and ORDERS tables.

You want to display the CUSTOMER_ID, PRODUCT_ID, and total (UNIT_PRICE multiplied by

QUANTITY) for the order placed. You also want to display the subtotals for a CUSTOMER_ID as well as

for a PRODUCT_ID for the last six months.

Which SQL statement would you execute to get the desired output?

A. 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 GROUP BY ROLLUP (o.customer_id,oi.product_id) WHERE MONTHS_BETWEEN(order_date, SYSDATE) <= 6;

B. 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 GROUP BY ROLLUP (o.customer_id,oi.product_id) HAVING MONTHS_BETWEEN(order_date, SYSDATE) <= 6;

C. 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 GROUP BY ROLLUP (o.customer_id, oi.product_id) WHERE MONTHS_BETWEEN(order_date, SYSDATE) >= 6;

D. 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) ;

Answer: D

上面这道题中其实要选择正确的答案是很简单的,就是group by应该放在where的后面,但是题目中出现的一个知识点需要我们注意,就是rollup的使用。

大家都熟悉group by基本语法,例如要统计每个部门的员工最高的工资,就可以使用

select max(sal) from emp group by deptno;

但是如果出现比较复杂的统计,单单靠group by基本用法是不能满足的需求的,还得配合rollup一起来使用,例如:

需要安装职位,经理,部门来统计员工的总工资,并且对职位,经理做一个子统计

SQL> select job,mgr,deptno,sum(sal)  from emp where deptno in(10,30)  group by rollup(job,mgr,deptno);

JOB                                MGR     DEPTNO   SUM(SAL)

--------------------------- ---------- ---------- ----------

CLERK                             7698         30        950

CLERK                             7698                   950

CLERK                             7782         10       1300

CLERK                             7782                  1300

CLERK                                                   2250

MANAGER                           7839         10       2450

MANAGER                           7839         30       2850

MANAGER                           7839                  5300

MANAGER                                                 5300

SALESMAN                          7698         30       5600

SALESMAN                          7698                  5600

JOB                                MGR     DEPTNO   SUM(SAL)

--------------------------- ---------- ---------- ----------

SALESMAN                                                5600

PRESIDENT                                      10       5000

PRESIDENT                                               5000

PRESIDENT                                               5000

18150

16 rows selected.

那么group by rollup的分组是按照以下步骤,在上述ROLLUP(job,mgr,deptno)例子中,首先会对(job,mgr,deptno)进行GROUP BY,然后对(job,mgr)进行GROUP BY,然后是(job)进行GROUP BY,最后对全表进行GROUP BY操作,结合上述的例子

首先对(job,mgr,deptno)分组,其统计结果类似如下:

CLERK                             7698         30        950

然后对(job,mgr)分组,其统计结果类似如下:

CLERK                             7698                   950

然后对(job)分组,其统计结果类似如下:

CLERK                                                   2250

最后对全表做一次分组统计

18150

这样分析以下,相信大家对group by rollup查询结构有一个全面的了解

CUUG

更多oracle视频教程请点击:http://crm2.qq.com/page/portalpage/wpa.php?uin=800060152&f=1&ty=1&aty=0&a=&from=6

oracle rollup 排序,Oracle教程之rollup用法相关推荐

  1. oracle cube排序,Oracle rollup cube 用法

    1.Oracle ROLLUP和CUBE 用法 Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句. 如果是Group by  ROLLUP(A, B, C)的话, ...

  2. oracle rollup 排序,Oracle分组函数之ROLLUP用法

    rollup函数 本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as s ...

  3. oracle 远程访问配置,C#教程之Oracle 远程访问配置

    服务端配置 如果不想自己写,可以通过 Net Manager 来配置. 以下配置文件中的 localhost 改为 ip 地址,否则,远程不能访问. 1.网络监听配置 # listener.ora N ...

  4. oracle进行排序,oracle排序的几种方法

    1.创建数据库表 CREATE TABLE USER_INFO ( USERID      VARCHAR2(10 BYTE)                 NOT NULL, USERNAME   ...

  5. oracle cube排序,Oracle命令CUBE

    Oracle基本命令:GROUP BY CUBE(字段列表):CUBE命令根据字段列表,生成不同的排列组合,并根据每一种组合结果,生成统计汇总.比 Oracle基本命令:GROUP BY CUBE(字 ...

  6. oracle listagg 排序,oracle 行转列 listagg与wm_concat

    wm_concat 和listagg 函数都可以实现对(单个或组合)列的合并,也可以看成是对某一列的"SUM",这俩个函数功能相同,listagg是在11.2的版本中才首次出现的, ...

  7. oracle 二级排序,Oracle基础(二)之排序(order by)、限定查询(where)

    一.排序 1.使用order by关键字 放在select子句最后面 2.升序ASC  默认为升序 降序DESC 3.order by 需要排序的字段 排序规则 4.order by 后可以跟字段也可 ...

  8. Pandas高级教程之:GroupBy用法

    文章目录 简介 分割数据 多index get_group dropna groups属性 index的层级 group的遍历 聚合操作 通用聚合方法 同时使用多个聚合方法 NamedAgg 不同的列 ...

  9. oracle字符串排序

    oracle字符串排序 oracle字符串排序 oracle字符串数字部分排序 oracle字符串排序 select * from table order by to_number(id) oracl ...

最新文章

  1. linux 测试各大网站速度curl
  2. 全球项目多区域数据同步问题解决方案
  3. php-fpm 参数及配置详解
  4. python结果输出到文件-python print输出到文件
  5. 【转摘】Word中查找与替换的妙用
  6. 六十五、下一个更大的数系列,单调栈解决方法
  7. 雷军的手机屏保亮了,网友哭笑不得:我还以为是董明珠呢!
  8. 如何在类的外部修改类中的私有数据成员
  9. 走进COM组件系列(一)
  10. 新生儿肺炎也许不发烧咳嗽
  11. 牛客网-C++剑指offer-第三十二题(把数组排成最小的数)
  12. ETCD数据库源码分析——etcdserver bootstrap初始化存储
  13. Canto加速市场的发展,连接全球的金融衍生品市场
  14. phpnow php升级,phpnow如何升级php版本
  15. 2023寒假模拟赛1题解
  16. 佳能(Canon)打印机初始化备忘录
  17. 藤子不二雄博物馆之行
  18. 高效记忆/形象记忆(10)英语单词记忆-音标法
  19. ROCK Pi 4B+ 快速上手指南(Windows 平台)
  20. [.NET]CheckBoxList 用法

热门文章

  1. 转:获得数据库自增长ID(ACCESS)与(SQLSERVER)
  2. 单指令流多数据流( SIMD)
  3. 移动客户端UI设计指南
  4. 血泪八条---给中国IT教育培训机构
  5. 实现公告板和本周热卖功能
  6. 简述php和web交互过程,PHP与Web页面交互操作实例分析
  7. 7 环境变量 立即生效_不服已经生效的刑事判决书该怎么办?刑事案件如何执行?...
  8. 匿名内部类 可以访问外部类_Java 内部类与外部类的互访使用小结
  9. windows服务器查看系统异常,Windows服务器异常---查看系统日志--以蓝屏为例分析...
  10. java中为什么还要防止内存泄露_JAVA防止内存的泄漏什么意思,内存还能泄露?...