SQL基礎之GROUPING


 

grouping sets就是由多個group by聯合起來,關系如下。

 

  select A , B from table group by grouping sets(A, B)   等價於

 

  select A , null as B  from table group by A  

 

  union all  

 select null as A ,  B  from table group by B 

2.grouping( )

  grouping函數用來區分NULL值,這里NULL值有2種情況,一是原本表中的數據就為NULL,二是由rollup、cube、grouping sets生成的NULL值。

  當為第一種情況中的空值時,grouping(NULL)返回0;當為第二種情況中的空值時,grouping(NULL)返回1。實例如下,從結果中可以看到第二個結果集中原本為null的數據由於grouping函數為1,故顯示ROLLUP-NULL字符串。

3.grouping_id( )

  grouping_id函數也是計算分組級別的函數,注意如果要使用grouping_id函數那必須得有group by字句,而且group by字句的中的列與grouping_id函數的參數必須相等。比如group by A,B,那么必須使用grouping_id(A,B)。下面用一個等效關系來說明grouping_id()與grouping()的聯系,grouping_id(A, B)等效於grouping(A) + grouping(B),但要注意這里的+號不是算術相加,它表示的是二進制數據組合在一起,比如grouping(A)=1,grouping(B)=1,那么grouping_id(A, B)=11B,也就是十進制數3。原來的表數據執行下面的sql語句結果太多效果不明顯,所以我改了下表數據,不過對比兩個結果集效果很明顯。

轉載:https://www.cnblogs.com/fangyz/p/5813916.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM