您的位置:首页 > 数据库 > Oracle

group by 子句中用 rollup 、cube以及用grouping()函数

2012-12-22 16:20 477 查看
1.带有rollup和cube操作符的Group By 解析

rollup 按分组的第一个列进行统计和最后的小计

cube 按分组的所有列的进行统计和最后的小计

2.grouping()函数

该函数可以接受一列,如果列值为空,返回1,否则为0 ,grouping()函数只能在使用 rollup 和 cube 的查询中使用,因为这两个函数在统计小计的时候,除值之外的列

都为空,所以在需要在返回空值的地方显示某个值时,非常有用。例如(借助于decode()函数):

 SELECT DECODE(GROUPING(FIRST_NAME), 1, 'All_employee', FIRST_NAME) AS EMP_NAME,

        SUM(SALARY) AS EMP_SALARY

   FROM EMPLOYEES

  GROUP BY ROLLUP(FIRST_NAME)

3.grouping sets 子句

使用grouping  sets 子句可以只返回小计记录( 总计也不返回,如果想带有总结,那么可以用grouping_id()函数,具体使用再查资料)。例如:

SELECT FIRST_NAME, JOB_ID, SUM(SALARY) AS EMP_SALARY

  FROM EMPLOYEES

 GROUP BY GROUPING SETS(FIRST_NAME, JOB_ID)

1.求汇总值的时候,可以直接用rollup或cube并借助于grouping()、decode()函数进行。

select decode(grouping(division_id), 1, 'All divid', division_id) a,

       decode(grouping(job_id), 1, 'total divid', job_id) b,

       sum(salary)

  from employees2

 group by cube(division_id, job_id);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息