SQL grouping sets 子句
来源:互联网 发布:linux node.js 安装xz 编辑:程序博客网 时间:2024/05/01 21:05
grouping sets子句允许你指定多个group by 选项。增强了group by 的功能。
可以通过一条select 语句实现复杂繁琐的多条select 语句的查询。并且更加的
高效,解析存储一条SQL于语句。下面通过使用grouping sets 子句与没有
使用grouping sets 子句来对比学习该子句。
查询每个部门的每类工作的平均工资,使用grouping sets的语句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id));
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
110 AC_ACCOUNT 8300
80 SA_REP 7909.09091
90 AD_VP 17000
50 ST_CLERK 2785
110 AC_MGR 12000
50 ST_MAN 7280
80 SA_MAN 12200
50 SH_CLERK 3215
没有使用grouping sets 的对等语句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by department_id,job_id;
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
110 AC_ACCOUNT 8300
80 SA_REP 7909.09091
90 AD_VP 17000
50 ST_CLERK 2785
110 AC_MGR 12000
50 ST_MAN 7280
80 SA_MAN 12200
50 SH_CLERK 3215
再查询每个部门每类工作平均工资的基础上,还要查询出每个部门的平均工资。使用grouping sets的语句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id),department_id);
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400#每个部门每类工作的平均工资。
10 4400#每个部门的平均工资。
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_MAN 11000
30 PU_CLERK 2780
30 4150
40 HR_REP 6500
没有使用grouping sets 的对等语句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by (department_id,job_id)
4 union
5 select department_id,null,avg(salary)
6 from hr.employees
7 group by department_id;
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_CLERK 2780
30 PU_MAN 11000
30 4150
40 HR_REP 6500
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id),department_id,());
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_MAN 11000
30 PU_CLERK 2780
再查询每个部门每类工作平均工资与查询出每个部门的平均工资的基础上,还要查询整个企业中雇员的平均工资。使用grouping sets的语句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by grouping sets ((department_id,job_id),department_id,()); #() 表示做一个整体的聚集。
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_MAN 11000
30 PU_CLERK 2780
。
。
。
6380.90909 #这一行查询的是整个employees 中雇员总的平均工资。
没有使用grouping sets 的对等语句。
SQL> select department_id,job_id,avg(salary)
2 from hr.employees
3 group by (department_id,job_id)
4 union
5 select department_id,null,avg(salary)
6 from hr.employees
7 group by department_id
8 union
9 select null,null,avg(salary)
10 from hr.employees;
DEPARTMENT_ID JOB_ID AVG(SALARY)
------------- ---------- -----------
10 AD_ASST 4400
10 4400
20 MK_MAN 13000
20 MK_REP 6000
20 9500
30 PU_CLERK 2780
30 PU_MAN 11000
30 4150
40 HR_REP 6500
。
。
。
6380.90909 #这一行查询的是整个employees 中雇员总的平均工资。
1 0
- SQL grouping sets 子句
- SQL grouping sets 子句
- sql PIVOT,UNPIVOT,GROUPING SETS
- SQL SERVER 2008 GROUP BY GROUPING SETS
- T-SQL中的GROUP BY GROUPING SETS
- T-SQL中的GROUP BY GROUPING SETS
- T-SQL中的GROUP BY GROUPING SETS
- T-SQL中的GROUP BY GROUPING SETS
- SQL SERVER中GROUPING SETS,CUBE,ROLLUP
- T-SQL中的GROUP BY GROUPING SETS
- grouping sets
- grouping sets
- GROUPING 、GROUPING SETS用法
- Oracle grouping和grouping sets
- GROUPING & GROUPING_ID & GROUP_ID & GROUPING SETS
- group by后加rollup子句的用法以及与cube和grouping sets子句的区别
- Oracle PL/SQL之GROUP BY GROUPING SETS
- Oracle PL/SQL之GROUP BY GROUPING SETS
- 网页收藏
- 【HDU4352/ZCMU1781】XHXJ's LIS(数位DP)
- axis调用webservice报错,org.apache.axis.ConfigurationException: No service named *** is available
- Spring AOP中pointcut expression表达式解析 及匹配多个条件
- JAVA实现八大内排序算法
- SQL grouping sets 子句
- 链表中环的入口结点
- 24条Docker建议
- 微信JS-SDK
- 考研总结
- 笔记
- IOS的国际化(一)APP名称和启动页
- 【注解】@Autowired 与 @Resource 的区别
- 161222随记