SQL> select emp_id,month,prd_type_id,amount
2 from all_sales
3 where emp_id=21
4 order by emp_id,month ;

EMP_ID      MONTH PRD_TYPE_ID     AMOUNT
---------- ---------- ----------- ----------
        21          1           4    3034.84
        21          1           3    6034.84
        21          1           2    1034.84
        21          1           5
        21          1           1   10034.84
        21          2           3    1944.65
        21          2           4    2944.65
        21          2           1   15144.65
注:表中数据太多,只显示了一部分。
表all_sales存放2003年每个员工每个产品每个月的销量,
SQL> select emp_id,month,sum(amount)
2 from all_sales
3 where emp_id=21
4 group by emp_id,month
5 order by month ;

EMP_ID      MONTH SUM(AMOUNT)
---------- ---------- -----------
        21          1    20139.36
        21          2     21578.6
        21          3    30251.32
        21          4     35729.8
        21          5    25358.24
        21          6    28258.56
        21          7    36449.36
        21          8    62639.28
        21          9    49418.28
        21         10    80016.76
        21         11    41018.92
        21         12    36139.36
用ROLLUP 进行分组

SQL> select emp_id,month,sum(amount)
2 from all_sales
3 where emp_id=21
4 group by rollup(emp_id,month) ;

EMP_ID      MONTH SUM(AMOUNT)
---------- ---------- -----------
        21          1    20139.36
        21          2     21578.6
        21          3    30251.32
        21          4     35729.8
        21          5    25358.24
        21          6    28258.56
        21          7    36449.36
        21          8    62639.28
        21          9    49418.28
        21         10    80016.76
        21         11    41018.92
        21         12    36139.36
        21              466997.84
                        466997.84

ROLLUP(emp_id,month):先对每个EMP_id的每个月的销量
进行分组求和,相当于GROUP BY EMP_ID,MONTH,得出这个员工,
每个月的销量总和,然后求这个员工一年所有的销量,相当于
GROUP BY EMP_ID,最后所求所有员工的销量总和,
因为查询限制只返回EMP_ID=21的数据,所以
最后两条记录的值相同。
group by rollup(emp_id,month) 与group by emp_id,month
不同之处在于是,group by rollup(emp_id,month) 求得每个员工的
月销量之后,又多做了两个工作,一是求得每个员一年所有的销量,
二是求所有员工的年总销量。
如果除去where emp_id=21,则最后一条记录返回所有员工的总销量,如:
SQL> select emp_id,month,sum(amount)
2 from all_sales
3 group by rollup(emp_id,month) ;

EMP_ID      MONTH SUM(AMOUNT)
---------- ---------- -----------
        21          1    20139.36
        21          2     21578.6
        21          3    30251.32
        21          4     35729.8
        21          5    25358.24
        21          6    28258.56
        21          7    36449.36
        21          8    62639.28
        21          9    49418.28
        21         10    80016.76
        21         11    41018.92
        21         12    36139.36
        21              466997.84
        22          1    21939.36
        22          2     21078.6     
        23          6    15658.56
        23          7    33649.3 
        23         11    30518.92
        23         12    24139.36
        23              323077.84
        24          1    14669.36
        24          2     28878.6
        24          3    35651.32   
        24         10    30116.76
        24         11    22621.92
        24         12    24139.36
        24              333370.84
        25          1     7269.36
        25          2     13678.6     
        25         11    12821.92
        25         12    12639.36
        25              187970.84
        26          1    16568.75   
        26         11    14821.38
        26         12    15639.37
        26              228769.93
                       1972485.13
数据太多,只显示一部分。
可以看出,group by rollup(emp_id,month) 为每个员工的销量进行了
汇总,得出了月销量和年销量(每个员工的最后一条),同时为所有员工进行了汇总,得出所有
员工的年总销量(最后一条记录)

函数:grouping 
接收列作为参数,如果列为空,则grouping返回1,否则返回0,该函数与rollup搭配使用。
可以使用grouping函数对上述查询进行处理。
SQL> SELECT DECODE(GROUPING(EMP_ID), 1, '所有员工', EMP_ID) EMP_ID,
2         nvl2(emp_id,DECODE(GROUPING(MONTH), 1, '员工年度', MONTH),'所有员工年度') ND,
3         SUM(AMOUNT)
4    FROM ALL_SALES
5   GROUP BY ROLLUP(EMP_ID, MONTH)
6 ; 
EMP_ID                                   ND                                       SUM(AMOUNT)
---------------------------------------- ---------------------------------------- -----------
21                                       1                                           20139.36
21                                       2                                            21578.6
21                                       3                                           30251.32
21                                       12                                          36139.36
21                                       员工年度                                   466997.84
26                                       7                                           12549.36
26                                       8                                           23139.28
26                                       9                                           19318.28
26                                       10                                          26116.99
26                                       11                                          14821.38
26                                       12                                          15639.37
26                                       员工年度                                   228769.93
所有员工                                 所有员工年度                              1972485.13

oracle GROUP BY rollup的更多相关文章

  1. oracle group by rollup,decode,grouping,nvl,nvl2,nullif,grouping_id,group_id,grouping sets,RATIO_TO

    干oracle 047文章12当问题,经验group by 声明.因此邂逅group by  rollup,decode,grouping,nvl,nvl2,nullif,RATIO_TO_REPOR ...

  2. Oracle Group by+rollup+cube 的应用

    首先我们创建一个示例表: Create table test_group (v_name varchar2(4) ,v_size varchar2(4) ,v_color varchar2(4) ,n ...

  3. oracle group by rollup实现小计、合计

    SQL合计汇总实现数据N+1条显示: 注意group by rollup((ename, job, empno))!!! select decode(grouping(ename) + groupin ...

  4. oracle group by中cube和rollup字句的使用方法及区别

    oracle group by中rollup和cube的区别:  Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句. 如果是ROLLUP(A, B, C)的话,先 ...

  5. [Oracle] Group By 语句的扩展 - Rollup、Cube和Grouping Sets

    常常写SQL语句的人应该知道Group by语句的主要使用方法是进行分类汇总,以下是一种它最常见的使用方法(依据部门.职位分别统计业绩): SELECT a.dname,b.job,SUM(b.sal ...

  6. oracle按照指定列分组合计group by rollup()

    group by rollup() 按分组合计 select grouping(status),status,owner,object_type,count(*) from dba_objects w ...

  7. Oracle:grouping和rollup

    Oracle grouping和rollup简单测试 SQL,,,) group by department_id order by department_id; DEPARTMENT_ID SUM( ...

  8. GROUP BY ROLLUP和CUBE 用法

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

  9. Oracle分析函数 — sum, rollup, cube, grouping用法

    本文通过例子展示sum, rollup, cube, grouping的用法. //首先建score表 create table score( class  nvarchar2(20), course ...

随机推荐

  1. PHP编写网页BS结构计算器

    利用PHP和Html + javascript 编写一个简单的网页计算器程序,可以根据这种有趣的开发构架出更加有趣的网页.​1. [代码]PHP计算器    <html><head& ...

  2. codeforces B. Roma and Changing Signs 解题报告

    题目链接:http://codeforces.com/problemset/problem/262/B 题目意思:给出 n 个数和恰好一共要做的操作总数k.通过对n个数进行k次操作,每次操作可以把a[ ...

  3. LDAP解释(转)

    我要着重指出,LDAP是一个数据库,但是又不是一个数据库.说他是数据库,因为他是一个数据存储的东西.但是说他不是数据库,是因为他的作用没有数据库这么强大,而是一个目录. 为了理解,给一个例子就是电话簿 ...

  4. linux应用之apache服务的安装及配置(centos)

    CentOS Apache服务器安装与配置   一.安装Apache程序,一般有三种安装方式:1.直接网络安装:2.下载rpm包,上传至服务器进行安装:3.通过原代码编译安装: yum -y inst ...

  5. BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量

    BZOJ_2438_[中山市选2011]杀人游戏 _强连通分量 Description 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人 ...

  6. webpack 基本功能和原理

    依赖管理:方便引用第三方模块.让模块更容易复用.避免全局注入导致的冲突.避免重复加载或加载不需要的模块. 合并代码:把各个分散的模块集中打包成大文件,减少HTTP的请求链接数,配合UglifyJS可以 ...

  7. MT8735A平台配置MT6630

    1. codegen配置 2. ProjectConfig CUSTOM_HAL_ANT = mt6630_ant_m1 CUSTOM_HAL_COMBO = mt6630 MTK_BT_CHIP = ...

  8. docker 学习(五) virtualBox虚拟机安装docker

    这里计划用virtualBox虚拟机安装两个ubuntu servers, 然后用docker把spring boot项目部署上去,模拟一下分布式的微服务情况. 1:安装virtualbox,后安装U ...

  9. c语言里如何调用汇编里的变量?

    c语言里如何调用汇编里的变量? 汇编语言:是声明全局变量 .globl _end_ofs _end_ofs: .word _end - _start c语言:声明这个变量,然后再调用这个变量 void ...

  10. Sense2vec with spaCy and Gensim

    如果你在2015年做过文本分析项目,那么你大概率用的是word2vec模型.Sense2vec是基于word2vec的一个新模型,你可以利用它来获取更详细的.与上下文相关的词向量.本文主要介绍该模型的 ...