Oracle 高级分组group by cube拓展(4)


        4          5                                                                       
        5          5                                                                       


        A        A2                                                                       
---------- ----------                                                                       
        6          5                                                                       
        7          5                                                                       
        8          5                                                                       
                    5                                                                       
        1          4                                                                       
        2          4                                                                       
        3          4                                                                       
                    4                                                                       
19 rows selected.   


从上面的输出中,我们会发现cube会将许多的null值,如果cube()里指定的列本身就具有null值,又需要如何区分呢?

解决方法为通过grouping()函数来排除null值,例如grouping(a)来检测A表中a列是否有一行null值是由cube产生的,如果有,则返回1,其他所有情况,则返回0.

接着再结合decode()函数或case表达式,来将cube()产生的null值转化成通俗易懂的字符串。


 实验如下:


HR@ORA11GR2 > select decode(grouping(a),1,'cube_value',a) a , decode(grouping(a2), 1, 'cube_value',a2) a2 from a group by cube(a, a2) order by a2 desc;


A                                        A2

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

cube_value                        cube_value

4                                        cube_value

8                                        cube_value

7                                        cube_value

6                                        cube_value

5                                        cube_value

3                                        cube_value

2                                        cube_value

1                                        cube_value

cube_value                              5

6                                        5


A                                        A2

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

8                                        5

7                                        5

4                                        5

5                                        5

1                                        4

cube_value                        4

3                                        4

2                                        4

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a279a8ddfdf8eccfe70e5a2aa949acc2.html