Maison > base de données > tutoriel mysql > ORACLE GROUPING函数的使用

ORACLE GROUPING函数的使用

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2016-06-07 15:03:58
original
1511 Les gens l'ont consulté

欢迎进入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函数的使用

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal