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_BYMISSING_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年剛剛上市的33HondaCRV10HondaCivic35都柏林33都柏林剛剛上市的10都柏林HondaCRV3都柏林HondaCivic20.弗裏蒙特32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic1013剛剛上市的8HondaCivic5——集團處理“彙總”條款。——等效組分組集((城市,car_model),(城市),())>選擇城市,car_model,總和(數量)作為總和經銷商集團通過城市,car_model彙總訂單通過城市,car_model;城市car_model總和- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -78年都柏林33都柏林剛剛上市的10都柏林HondaCRV3都柏林HondaCivic20.弗裏蒙特32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic1013剛剛上市的8HondaCivic5——集團處理“立方體”條款。——等效組分組集((城市,car_model),(城市),(car_model), ())>選擇城市,car_model,總和(數量)作為總和經銷商集團通過城市,car_model多維數據集訂單通過城市,car_model;城市car_model總和- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -78年剛剛上市的33HondaCRV10HondaCivic35都柏林33都柏林剛剛上市的10都柏林HondaCRV3都柏林HondaCivic20.弗裏蒙特32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic1013剛剛上市的8HondaCivic5——準備數據忽略null的例子>創建臨時視圖(id,的名字,年齡)作為(One hundred.,“瑪麗”,),(200年,“約翰。”,30.),(300年,“邁克”,80年),(400年,“丹”,50);——選擇列的第一行的年齡>選擇第一個(年齡);第一個(年齡,)- - - - - - - - - - - - - - - - - - - - -——在列第一行“年齡”忽略null,最後一行的id列和列“id”。>選擇第一個(年齡忽略零位),去年(id),總和(id);第一個(年齡,真正的)去年(id,)總和(id)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -30.400年1000年