ROLLUP和CUBE 用法

Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping(id)可以美化效果

SQL> create table t3 as select * from dba_indexes;

Table created.

SQL> select count(1) from t3;

[@more@]

COUNT(1)
----------
1561

SQL> select grouping(index_type) g_ind, grouping(status) g_st, index_type, status, count(*) from t3 group by rollup(index_type, status);

G_IND G_ST INDEX_TYPE STATUS COUNT(*)
---------- ---------- --------------------------- -------- ----------
0 0 LOB N/A 1
0 0 LOB VALID 478
0 1 LOB 479
0 0 NORMAL N/A 56
0 0 NORMAL VALID 937
0 1 NORMAL 993
0 0 CLUSTER VALID 10
0 1 CLUSTER 10
0 0 IOT - TOP VALID 63
0 1 IOT - TOP 63
0 0 FUNCTION-BASED DOMAIN VALID 1

G_IND G_ST INDEX_TYPE STATUS COUNT(*)
---------- ---------- --------------------------- -------- ----------
0 1 FUNCTION-BASED DOMAIN 1
0 0 FUNCTION-BASED NORMAL VALID 15
0 1 FUNCTION-BASED NORMAL 15
1 1 1561

15 rows selected.

SQL> select grouping(index_type) g_ind, grouping(status) g_st, index_type, status, count(*) from t3 group by cube(index_type, status);

G_IND G_ST INDEX_TYPE STATUS COUNT(*)
---------- ---------- --------------------------- -------- ----------
1 1 1561
1 0 N/A 57
1 0 VALID 1504
0 1 LOB 479
0 0 LOB N/A 1
0 0 LOB VALID 478
0 1 NORMAL 993
0 0 NORMAL N/A 56
0 0 NORMAL VALID 937
0 1 CLUSTER 10
0 0 CLUSTER VALID 10

G_IND G_ST INDEX_TYPE STATUS COUNT(*)
---------- ---------- --------------------------- -------- ----------
0 1 IOT - TOP 63
0 0 IOT - TOP VALID 63
0 1 FUNCTION-BASED DOMAIN 1
0 0 FUNCTION-BASED DOMAIN VALID 1
0 1 FUNCTION-BASED NORMAL 15
0 0 FUNCTION-BASED NORMAL VALID 15

17 rows selected.

以上说明,比rollup,cube增加了对status字段的group by统计

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22466621/viewspace-1048020/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22466621/viewspace-1048020/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值