group by 作爲一種分組查詢,在sql中用處十分廣泛。其中的簡單用法,這裏不再進行贅述,這篇文章,主要是研究 group by 的 rollup ,cube以及grouping sets
測試的表如下圖所示
group by rollup
理解:先按照一定的規則產生多種分組,然後按照各組統計數據
按上述例子來說:
有三種分組
1:group by null,即,只統計數據,沒有進行分組
2:group by cust_code,即,只按照cust_code進行分組
3:group by cust_code,toba_code即,相當於沒寫rollup
最終的結果爲:三種結果的並集
分組的規律:
分組的種類數爲:rollup後面的字段數 + 1
Group by rollup(A,B,C,D....)
1.group by null
2.group by A
3.group by A,B
4.group by A,B,C
5.group by A,B,C,D
6. ....
每一種分組的個數爲:group by 後面字段在 【所查詢數據】的種類數
以上述例子來說:
所查詢數據爲:
select sum(toba_num),cust_code,toba_code fromgroupbytest
第一種分組的個數:永遠是一個
第二種分組的個數:cust_code在【所查詢數據】的種類數爲2個
第三種分組的個數:(cust_code,toba_code)在【所查詢數據】的種類數爲6個
所以一共有九個數據。
group by cube
Cube:多維數據集。然後執行下面的sql語句
select sum(toba_num),cust_code,toba_code fromgroupbytest group by cube (cust_code,toba_code)
得到的結果,如下圖所示
理解:先按照一定的規則產生多種分組,然後按照各組統計數據
按上述例子來說:
有四種分組
1:group by null,即,只統計數據,沒有進行分組
2:group by cust_code,即,只按照cust_code進行分組
3:group by toba_code,即,只按照toba_code進行分組
4:group by cust_code,toba_code即,相當於沒寫cube
最終的結果爲:四種結果的並集
分組的種類數爲:
n爲:cube括號裏面的字段數
如:Group by rollup(A,B,C),首先會產生8個分組,分別爲:
1.group by null,即,只統計數據,沒有進行分組
2.group by A,即,只按照A進行分組
3.group by B,即,只按照B進行分組
4.group by C,即,只按照C進行分組
5.group by A,C,即,按照A,C進行分組
6.group by A,B,即,按照A,B進行分組
7.group by B,C,即,按照B,C進行分組
8.group by A,B,C,即,相當於沒寫cube
每一種分組的個數爲:跟rollup相同
group by grouping sets
Grouping sets:分組設置/集。然後執行下面的sql語句
select sum(toba_num),cust_code,toba_code fromgroupbytest group by grouping sets(cust_code,toba_code)
結果如下圖所示理解:先按照一定的規則產生多種分組,然後按照各組統計數據
按上述例子來說:
有兩種分組
1:group by cust_code,即,只按照cust_code進行分組
2:group by toba_code,即,只按照toba_code進行分組
最終的結果爲:兩種結果的並集
分組的規律:
分組的種類數爲:grouping sets括號裏面的字段數
Group by grouping sets(A,B,C,D....)
1.group by A
2.group by B
3.group by C
4.group by D
5. ....
每一組分組的種類數爲:同rollup