7.7 使用rollup子句
--向rollup传递一列
select division_id,sum(salary) from employees2 group by rollup(division_id);

--向rollup传递多列
select division_id,job_id,sum(salary) from employees2 group by rollup(division_id,job_id);

--修改传递给rollup的列的位置
select job_id,division_id,sum(salary) from employees2 group by rollup(job_id,division_id);

--向cube传递一列
select division_id,sum(salary) from employees2 group by cube(division_id);

--向cube传递多列
select division_id,job_id,sum(salary) from employees2 group by cube(division_id,job_id);

--修改传递给cube的列的位置
select job_id,division_id,sum(salary) from employees2 group by cube(job_id,division_id);

--grouping如果列值为空,那么返回1,如果列值非空,则返回0
select grouping(division_id),division_id,sum(salary) from employees2 group by rollup(division_id);

--使用decode转换grouping的一个列的值 rollup
select decode(grouping(division_id), 1, 'all divisions', division_id) div,
division_id,
sum(salary)
from employees2
group by rollup(division_id);

--使用decode转换grouping的多个列的值 rollup
select decode(grouping(division_id), 1, 'all divisions', division_id) div,
decode(grouping(job_id), 1, 'all jobs', job_id) job,
division_id,
sum(salary)
from employees2
group by rollup(division_id, job_id);

--使用decode转换grouping的一个列的值 cube
select decode(grouping(division_id), 1, 'all divisions', division_id) div,
division_id,
sum(salary)
from employees2
group by cube(division_id);

--使用decode转换grouping的多个列的值 cube
select decode(grouping(division_id), 1, 'all divisions', division_id) div,
decode(grouping(job_id), 1, 'all jobs', job_id) job,
division_id,
sum(salary)
from employees2
group by cube(division_id, job_id);

--使用grouping sets子句只返回小计记录
select division_id,job_id,sum(salary) from employees2 group by grouping sets(division_id,job_id);

--grouping_id
division_id和job_id两列都非空,返回0
division_id非空,job_id为空,返回1
division_id为空,job_id非空,返回2
division_id和job_id两列都为空,返回3
select division_id,
job_id,
grouping_id(division_id, job_id) grp_id,
sum(salary)
from employees2
group by cube(division_id, job_id);

--使用having过滤
select division_id,
job_id,
grouping_id(division_id, job_id) grp_id,
sum(salary)
from employees2
group by cube(division_id, job_id)
having grouping_id(division_id, job_id) > 0;

--在group by子句中多次使用一个列
select division_id, job_id, sum(salary)
from employees2
group by division_id, rollup(division_id, job_id);

--group_id消除group by子句返回的重复记录
select division_id, job_id, group_id(), sum(salary)
from employees2
group by division_id, rollup(division_id, job_id);

select division_id, job_id, group_id(), sum(salary)
from employees2
group by division_id, rollup(division_id, job_id) having group_id() = 0;

7.7 使用rollup子句的更多相关文章
- [转]group by 后使用 rollup 子句总结
group by 后使用 rollup 子句总结 一.如何理解group by 后带 rollup 子句所产生的效果 group by 后带 rollup 子句的功能可以理解为:先按一定的规则产生多种 ...
- Grouping Sets:CUBE和ROLLUP从句
在上一篇文章里我讨论了SQL Server里Grouping Sets的功能.从文中的例子可以看到,通过简单定义需要的分组集是很容易进行各自分组.但如果像从所给的列集里想要有所有可能的分布——即所谓的 ...
- 【T-SQL系列】WITH ROLLUP、WITH CUBE、GROUPING语句的应用
CUBE 和 ROLLUP 之间的区别在于:CUBE 运算符生成的结果集是多维数据集.多维数据集是事实数据的扩展,事实数据即记录个别事件的数据.扩展建立在用户打算分析的列上.这些列被称为维.多维数据集 ...
- SQL注入: with rollup特性
题目名称:因缺思汀的绕过 题目地址:http://www.shiyanbar.com/ctf/1940 1.with rollup: with rollup关键字会在所有记录的最后加上一条记录,该记录 ...
- 【Teradata】grouping和rollup窗口函数
1.group by后带rollup子句 先按一定的规则产生多种分组,然后返回各个分组所产生的结果集的并集,且没有去掉重复数据(统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函 ...
- 使用 GROUP BY WITH ROLLUP 改善统计性能
使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息,它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息,还能检索出本组类的整体聚合信息. 下面我们的例 ...
- (转)MYSQL 的 WITH ROLLUP
使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息,它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息,还能检索出本组类的整体聚合信息. 下面我们的例 ...
- WITH ROLLUP、WITH CUBE、GROUPING语句的应用
作者:Bobby0322 CUBE 和 ROLLUP 之间的区别在于:CUBE 运算符生成的结果集是多维数据集.多维数据集是事实数据的扩展,事实数据即记录个别事件的数据.扩展建立在用户打算分析的列上. ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
随机推荐
- CDOJ 1431 不是图论 Label:Tarjan || Kosarajn
Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Description 给出一个nn个点, ...
- 洛谷 P1262 间谍网络 Label: Kosarajn强联通
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- C++ string 类的 find 方法实例详解
1.C++ 中 string 类的 find 方法列表 size_type std::basic_string::find(const basic_string &__str, size_ty ...
- Photoshop教您快速的制作标准一寸证件照教程
Photoshop教您快速的制作标准一寸证件照教程 对急需证件照的朋友,只要有一部相机,有电脑安装了PS软件,就可很快自己完成一寸照片的制作. 首先将相机卡里的照片存放在电脑硬盘里: 打开PS图片处理 ...
- java list 交集 并集 差集 去重复并集
package com; import java.util.ArrayList;import java.util.Iterator;import java.util.List; public clas ...
- nodejs之async异步编程
1.什么是异步编程? 异步编程是指由于异步I/O等因素,无法同步获得执行结果时, 在回调函数中进行下一步操作的代码编写风格,常见的如setTimeout函数.ajax请求等等. 示例: for (v ...
- Enumerators and Enumerable
Next week task is to learn how generic enumeration interface works, try to build a sample and write ...
- Find a way——L
L. Find a way Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave N ...
- 2015Web前端攻城之路
2015目标成为一名合格的前端攻城狮. 养成计划: 1.html / css 2.js 3.ajax 4.框架 5.项目实战
- java-两个大数相加
题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a=&qu ...