GROUP BY子句
適用於:磚的SQL磚運行時
的集團通過
條款是用來組行基於一組指定分組表達式和計算聚合的行組基於一個或多個指定的聚合函數。磚SQL也支持先進的聚合多個相同的輸入記錄集通過聚合分組集
,多維數據集
,彙總
條款。分組表達式和先進的聚合可以混合集團通過
條款和嵌套分組集
條款。
看到更多的細節在混合/嵌套分組分析部分。
當一個過濾器
條款附加到一個聚合函數,隻有匹配行傳遞給這個函數。
語法
集團通過所有集團通過group_expression(,…](與彙總|與多維數據集]集團通過{group_expression|{彙總|多維數據集|分組集}(grouping_set(,…])}(,…]grouping_set{表達式|((表達式(,…]])}
而聚合函數被定義為
aggregate_name((截然不同的]表達式(,…])(過濾器(在哪裏boolean_expression)]
參數
所有
適用於:磚的SQL磚運行時12.1及以上
添加所有的速記符號
選擇
附些不包含聚合函數表達式group_expression
如果不存在這樣的表情。集團通過所有
相當於省略嗎集團通過
條款導致全球聚合。集團通過所有
是不能保證產生一組表達式可以得到解決。磚了UNRESOLVED_ALL_IN_GROUP_BY或MISSING_AGGREGATION如果條款不是格式良好的生產。group_expression
指定的標準分組行。行分組的執行是基於分組的結果值表達式。一個分組表達式可能是一個列名
集團通過一個
,列的位置集團通過0
,或者一個表達式集團通過一個+b
。如果group_expression
包含一個聚合函數磚了GROUP_BY_AGGREGATE錯誤。grouping_set
分組集是由零個或多個指定逗號分隔在括號表達式。分組集隻有一個元素時,可以省略括號。例如,
分組集((),(b))
是一樣的分組集(一個b)
。分組集
組行後指定為每個分組集
分組集
。例如:集團通過分組集((倉庫),(產品)
語義上等價於聯盟的結果嗎集團通過倉庫
和集團通過產品
。這一條款是一個簡稱
聯盟所有
的每條腿在哪裏聯盟所有
操作員執行聚合每個分組的設置中指定的分組集
條款。同樣的,
集團通過分組集(倉庫,產品),(產品),())
語義上等價於歐盟的結果嗎集團通過倉庫,產品
,集團通過產品
和一個全球總。
請注意
蜂巢相容性磚SQL允許集團通過…分組集(…)
。的集團通過
表達式通常被忽略,但是如果他們包含額外的表情除了分組集
表情,額外的表達式將被納入分組表達式和價值總是空的。例如,選擇一個,b,c從…集團通過一個,b,c分組集(一個b)
列的輸出c總是空的。
彙總
指定多個級別的聚合在一個聲明中。這一條款是基於多個分組集用於計算聚合。
彙總
是一個縮寫分組集
。例如:集團通過倉庫,產品與彙總
或集團通過彙總(倉庫,產品)
相當於集團通過分組集(倉庫,產品),(倉庫),())
。而
集團通過彙總(倉庫,產品,(倉庫,位置)
相當於
集團通過分組集(倉庫,產品,位置),(倉庫,產品),(倉庫),())
。的N個元素
彙總
規範導致N + 1分組集
。多維數據集
的
多維數據集
子句用於執行聚合基於分組中指定列的組合集團通過
條款。多維數據集
是一個縮寫分組集
。例如:集團通過倉庫,產品與多維數據集
或集團通過多維數據集(倉庫,產品)
相當於集團通過分組集(倉庫,產品),(倉庫),(產品),())
。而
集團通過多維數據集(倉庫,產品,(倉庫,位置)
相當於
集團通過分組集(倉庫,產品,位置),(倉庫,產品),(倉庫,位置),(產品,倉庫,位置),(倉庫),(產品),(倉庫,產品),())
。的N個元素
多維數據集
規範導致2 ^ N分組集
。aggregate_name
一個聚合函數名(最小,最大,統計,和,AVG,等等)。
截然不同的
刪除重複的輸入行傳遞給聚合函數。
過濾器
過濾器的輸入行
boolean_expression
在在哪裏
子句的計算結果為真時,被傳遞到聚合函數;其他行被丟棄。
混合/嵌套的分組分析
一個集團通過
條款可以包括多個group_expressions和多個多維數據集
,彙總
,分組集
年代。
分組集
還可以嵌套多維數據集
,彙總
,或分組集
條款。例如:
分組集(彙總(倉庫,位置),多維數據集(倉庫,位置),分組集(倉庫,分組集(位置,分組集(彙總(倉庫,位置),多維數據集(倉庫,位置))))
多維數據集
和彙總
隻是語法糖分組集
。請參考上麵的部分如何翻譯多維數據集
和彙總
來分組集
。group_expression
可視為一個單一群體分組集
在這種情況下。
為多個分組集
在集團通過
SQL生成一個條款,磚分組集
通過跨產品的原始分組集
。
嵌套分組集
在分組集
條款,磚SQL的簡單的分組集和帶他們。例如:
集團通過倉庫,分組集((產品),()),分組集(位置,大小),(位置),(尺寸),())
和
集團通過倉庫,彙總(產品),多維數據集(位置,大小)
相當於集團通過分組集((倉庫,產品,的位置,大小),(倉庫,產品,位置),(倉庫,產品,大小),(倉庫,產品),(倉庫,的位置,大小),(倉庫,位置),(倉庫,大小),(倉庫)
。
而集團通過分組集(分組集(倉庫),分組集(倉庫,產品)))
相當於集團通過分組集((倉庫),(倉庫,產品)
。
例子
創建臨時視圖經銷商(id,城市,car_model,數量)作為值(One hundred.,“弗裏蒙特”,“本田思域”,10),(One hundred.,“弗裏蒙特”,“本田雅閣”,15),(One hundred.,“弗裏蒙特”,“本田CRV”,7),(200年,“都柏林”,“本田思域”,20.),(200年,“都柏林”,“本田雅閣”,10),(200年,“都柏林”,“本田CRV”,3),(300年,“聖荷西”,“本田思域”,5),(300年,“聖荷西”,“本田雅閣”,8);——每經銷商數量的總和。集團通過“id”。>選擇id,總和(數量)從經銷商集團通過id訂單通過id;id總和(數量)推薦- - - - - - - - - - - - - - - - - - -One hundred.32200年33300年13——在GROUP by子句中使用列位置。>選擇id,總和(數量)從經銷商集團通過1訂單通過1;id總和(數量)推薦- - - - - - - - - - - - - - - - - - -One hundred.32200年33300年13——多個聚合。——1。和每個經銷商的數量。——2。最大數量/經銷商。>選擇id,總和(數量)作為總和,馬克斯(數量)作為馬克斯從經銷商集團通過id訂單通過id;id總和馬克斯推薦- - - - - - - - - - - - - - -One hundred.3215200年3320.300年138——計算不同經銷商的數量每car_model在城市。>選擇car_model,數(截然不同的城市)作為數從經銷商集團通過car_model;car_model數- - - - - - - - - - - - - - - - - -本田公民3本田CRV2本田協議3——計算不同經銷商的數量在城市每car_model使用組>選擇car_model,數(截然不同的城市)作為數從經銷商集團通過所有;car_model數- - - - - - - - - - - - - - - - - -本田公民3本田CRV2本田協議3——之和隻有本田思域和本田CRV的數量/經銷商。>選擇id,總和(數量)過濾器(在哪裏car_model在(“本田思域”,“本田CRV”))作為”總和(數量)”從經銷商集團通過id訂單通過id;id總和(數量)推薦- - - - - - - - - - - - - - - - - - -One hundred.17200年23300年5——聚合使用多個分組集列在一個聲明中。之後,根據四組分組列執行聚合。——1。城市,car_model——2。城市——3。car_model——4。空分組集。返回所有城市和汽車模型數量。>選擇城市,car_model,總和(數量)作為總和從經銷商集團通過分組集((城市,car_model),(城市),(car_model),())訂單通過城市;城市car_model總和- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -零零78年零剛剛上市的33零HondaCRV10零HondaCivic35都柏林零33都柏林剛剛上市的10都柏林HondaCRV3都柏林HondaCivic20.弗裏蒙特零32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic10聖穆零13聖穆剛剛上市的8聖穆HondaCivic5——集團處理“彙總”條款。——等效組分組集((城市,car_model),(城市),())>選擇城市,car_model,總和(數量)作為總和從經銷商集團通過城市,car_model與彙總訂單通過城市,car_model;城市car_model總和- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -零零78年都柏林零33都柏林剛剛上市的10都柏林HondaCRV3都柏林HondaCivic20.弗裏蒙特零32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic10聖穆零13聖穆剛剛上市的8聖穆HondaCivic5——集團處理“立方體”條款。——等效組分組集((城市,car_model),(城市),(car_model), ())>選擇城市,car_model,總和(數量)作為總和從經銷商集團通過城市,car_model與多維數據集訂單通過城市,car_model;城市car_model總和- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -零零78年零剛剛上市的33零HondaCRV10零HondaCivic35都柏林零33都柏林剛剛上市的10都柏林HondaCRV3都柏林HondaCivic20.弗裏蒙特零32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic10聖穆零13聖穆剛剛上市的8聖穆HondaCivic5——準備數據忽略null的例子>創建臨時視圖人(id,的名字,年齡)作為值(One hundred.,“瑪麗”,零),(200年,“約翰。”,30.),(300年,“邁克”,80年),(400年,“丹”,50);——選擇列的第一行的年齡>選擇第一個(年齡)從人;第一個(年齡,假)- - - - - - - - - - - - - - - - - - - - -零——在列第一行“年齡”忽略null,最後一行的id列和列“id”。>選擇第一個(年齡忽略零位),去年(id),總和(id)從人;第一個(年齡,真正的)去年(id,假)總和(id)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -30.400年1000年