Home >Database >Mysql Tutorial >ORACLE GROUPING函数的使用

ORACLE GROUPING函数的使用

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-07 15:03:581509browse

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROU

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

    GROUPING函数可以接受一列,返回0或者1。如果列值为空,那么GROUPING()返回1;如果列值非空,那么返回0。GROUPING只能在使用ROLLUP或CUBE的查询中使用。当需要在返回空值的地方显示某个值时,GROUPING()就非常有用。

    关于ROLLUP和CUBE函数的使用,请参见我的另一篇文章。

    1、在ROLLUP中对单列使用GROUPING()

    SQL> select division_id,sum(salary)

    2  from employees2

    3  group by rollup(division_id)

    4  order by division_id;

    DIV SUM(SALARY)

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

    BUS     1610000

    OPE     1320000

    SAL     4936000

    SUP     1015000

    8881000

    加上GROUPING来看看

    SQL> select grouping(division_id),division_id,sum(salary)

    2  from employees2

    3  group by rollup(division_id)

    4  order by division_id;

    GROUPING(DIVISION_ID) DIV SUM(SALARY)

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

    0 BUS     1610000

    0 OPE     1320000

    0 SAL     4936000

    0 SUP     1015000

    1         8881000

    可以看到,为空的地方返回1,非空的地方返回0。

    2、使用CASE转换GROUPING()的返回值

    可能你会觉得前面的0和1太枯燥了,代表不了任何意义,说白了就是不够人性化,呵呵。这个时候我们可以使用CASE来转换为一些有意义的值。

    SQL> select

    2  case grouping(division_id)

    3  when 1 then 'all divisions'

    4  else division_id

    5  end as div,

    6  sum(salary)

    7  from employees2

    8  group by rollup(division_id)

    9  order by division_id;

    DIV           SUM(SALARY)

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

    BUS               1610000

    OPE               1320000

    SAL               4936000

    SUP               1015000

    all divisions     8881000

    3、使用CASE和GROUPING()转换多个列的值

    SQL> select

    2  case grouping(division_id)

    3  when 1 then 'all divisions'

    4  else division_id

    5  end as div,

    6  case grouping(job_id)

    7  when 1 then 'all jobs'

    8  else job_id

    9  end as job,

    10  sum(salary)

    11  from employees2

    12  group by rollup(division_id,job_id)

    13  order by division_id,job_id;

    DIV           JOB      SUM(SALARY)

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

    BUS           MGR           530000

    BUS           PRE           800000

    BUS           WOR           280000

    BUS           all jobs     1610000

    OPE           ENG           245000

    OPE           MGR           805000

    OPE           WOR           270000

[1] [2] 

ORACLE GROUPING函数的使用

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn