您的位置:金沙游乐场85155 > 大数据库 > GROUP函数-GROUP_ID金沙85155登入,GROUPING,GROUPING_ID

GROUP函数-GROUP_ID金沙85155登入,GROUPING,GROUPING_ID

发布时间:2019-10-19 20:42编辑:大数据库浏览(128)

    转自: http://www.maomao365.com/?p=6208 金沙85155登入, 

    GROUP_ID

    摘要:
    GROUPING 用于区分列是否由 ROLLUP、CUBE 或 GROUPING SETS 聚合而产生的行
    如果是原生态的行聚合,则返回0 ,新增的行数据就返回1

    首先我们看看官方的解释:


    金沙85155登入 1

    grouping 语法简介 :
    GROUPING (<列名>)
    参数列名:

    返回值
    tinyint
    <hr />
    grouping 应用举例:  

    大意是GROUP_ID用于区分相同分组标准的分组统计结果。

    create table test(info varchar(30))
    go
    insert into test (info)values('a'),
    ('b'),('a'),('c'),('d'),('d') 
    go
    
    select info,count_big(info),grouping(info)
    from test group by info 
    WITH ROLLUP
    
    go
    drop table test 
    ----输出----
    ifno 无列名 无列名
    a    2    0
    b    1    0
    c    1    0
    d    2    0
    NULL    6    1
    

    解释起来比较抽象,下面我们来看看具体的案例。

     

    例1:单一分组

    SQL> select group_id(),deptno,sum(sal) from emp group by rollup(deptno);
    
    GROUP_ID()     DEPTNO    SUM(SAL)
    ---------- ----------  ----------
             0         10        8750
             0         20       10875
             0         30        9400
             0                  29025
    

    rollup(deptno)只是一个唯一的分组,所以产生的group_id()为0,代表这是同一个分组的结果。

    下面我们来看看重复分组的情况

    例2:重复分组

    SQL> select group_id(),deptno,sum(sal) from emp group by rollup(deptno,deptno);
    
    GROUP_ID()      DEPTNO    SUM(SAL)
    ----------  ---------- ----------
             0         10        8750
             0         20       10875
             0         30        9400
             1         10        8750
             1         20       10875
             1         30        9400
             0                  29025
    
    7 rows selected.
    

    group_id()为1代表这些是重复的分组。

    注意:可通过having group_id() <1来剔除重复的分组。

    老实说,我也看不出GROUP_ID在实际工作中的应用场景,姑且先记着。

     

    GROUPING

    其语法为:GROUPING(expr)

    下面我们来看看官方的解释:

    金沙85155登入 2

    即GROUPING函数用于区分分组后的普通行和聚合行。如果是聚合行,则返回1,反之,则是0。

    下面我们来看看具体的案例:

    SQL> select grouping(deptno),grouping(job),deptno,job,sum(sal) from emp group by rollup(deptno,job);
    
    GROUPING(DEPTNO) GROUPING(JOB)       DEPTNO JOB          SUM(SAL)
    ---------------- -------------   ---------- ---------  ----------
                   0             0           10 CLERK            1300
                   0             0           10 MANAGER          2450
                   0             0           10 PRESIDENT        5000
                   0             1           10                  8750
                   0             0           20 CLERK            1900
                   0             0           20 ANALYST          6000
                   0             0           20 MANAGER          2975
                   0             1           20                 10875
                   0             0           30 CLERK             950
                   0             0           30 MANAGER          2850
                   0             0           30 SALESMAN         5600
                   0             1           30                  9400
                   1             1                              29025
    
    13 rows selected.
    

    首先我们看GROUPING(DEPTNO)这一列的结果,不难看出,凡是基于DEPTNO的汇总,GROUPING的结果均为0,因为最后一行是总的汇总,所以GROUPING的值为1.

    基于这个逻辑,可以看出GROUPING(JOB)的值也是吻合的。

     

    GROUPING_ID

    GROUPING_ID是GROUPING的增强版,与GROUPING只能带一个表达式不同,它能带多个表达式。

    本文由金沙游乐场85155发布于大数据库,转载请注明出处:GROUP函数-GROUP_ID金沙85155登入,GROUPING,GROUPING_ID

    关键词: