GROUP BY子句

適用於:勾選“是”磚的SQL勾選“是”磚運行時

集團通過子句用於根據一組指定的分組表達式對行進行分組,並根據一個或多個指定的聚合函數對行組計算聚合。Databricks SQL還支持高級聚合,以便通過via對同一輸入記錄集進行多個聚合分組多維數據集彙總條款。分組表達式和高級聚合可以混合在集團通過子句並嵌套在分組條款。

在混合/嵌套分組分析一節中查看更多細節。

當一個過濾器子句附加到聚合函數時,隻有匹配的行被傳遞給該函數。

語法

集團通過group_expression[,...彙總|多維數據集集團通過group_expression|彙總|多維數據集|分組grouping_set[,...[,...grouping_set表達式|表達式[,...

而聚合函數定義為

aggregate_name截然不同的表達式[,...過濾器在哪裏boolean_expression

參數

  • group_expression

    指定將行分組在一起的條件。行分組是根據分組表達式的結果值執行的。分組表達式可以是列名,如集團通過一個,列位置為集團通過0,或者像這樣的表達集團通過一個+b.如果group_expression包含一個聚合函數Databricks提出了一個GROUP_BY_AGGREGATE錯誤。

  • grouping_set

    分組集由0個或多個括號中以逗號分隔的表達式指定。當分組集隻有一個元素時,括號可以省略。例如,分組((),(b))分組(一個b)

  • 分組集

    對後麵指定的每個分組集的行進行分組分組.例如:

    集團通過分組((倉庫),(產品)的結果的並集在語義上等價於集團通過倉庫而且集團通過產品

    這個從句是a的簡寫聯盟所有每條腿在哪裏聯盟所有操作符中指定的每個分組集執行聚合分組條款。

    同樣的,集團通過分組(倉庫,產品),(產品),())的結果的並集在語義上等價於集團通過倉庫,產品集團通過產品這是全球的總和。

請注意

對於Hive兼容性,Databricks SQL允許集團通過...分組(…).的集團通過表達式通常會被忽略,但如果它們包含除分組表達式,額外的表達式將包含在分組表達式中,且值始終為null。例如,選擇一個,b,c...集團通過一個,b,c分組(一個b),則列c的輸出始終為空。

  • 彙總

    在單個語句中指定多個級別的聚合。此子句用於基於多個分組集計算聚合。彙總是一種簡寫分組.例如:

    集團通過倉庫,產品彙總集團通過彙總(倉庫,產品)等於

    集團通過分組集(倉庫,產品),(倉庫),())

    集團通過彙總(倉庫,產品,(倉庫,位置)

    等於集團通過分組集(倉庫,產品,位置),(倉庫,產品),(倉庫),())

    a的N個元素彙總規格結果為N+1分組

  • 多維數據集

    多維數據集子句用於基於中指定的分組列的組合執行聚合集團通過條款。多維數據集是一種簡寫分組.例如:

    集團通過倉庫,產品多維數據集集團通過多維數據集(倉庫,產品)等於

    集團通過分組集(倉庫,產品),(倉庫),(產品),())

    集團通過多維數據集(倉庫,產品,(倉庫,位置)

    等於集團通過分組集(倉庫,產品,位置),(倉庫,產品),(倉庫,位置),(產品,倉庫,位置),(倉庫),(產品),(倉庫,產品),())

    a的N個元素多維數據集規範的結果是2^N分組

  • aggregate_name

    一個聚合函數名(MIN, MAX, COUNT, SUM, AVG等)。

  • 截然不同的

    在將輸入行傳遞給聚合函數之前刪除重複的輸入行。

  • 過濾器

    屬性所對應的輸入行進行篩選boolean_expression在哪裏子句的值為true則傳遞給聚合函數;其他行將被丟棄。

混合/嵌套分組分析

一個集團通過子句可以包含多個group_expression和多個多維數據集彙總,分組年代。

分組也可以嵌套多維數據集彙總,或分組條款。例如:

分組集(彙總(倉庫,位置),多維數據集(倉庫,位置),分組集(倉庫,分組集(位置,分組集(彙總(倉庫,位置),多維數據集(倉庫,位置))))

多維數據集而且彙總隻是語法糖嗎分組.關於如何翻譯,請參考上麵的部分多維數據集而且彙總分組group_expression可以作為單一群體來對待嗎分組在這種情況下。

為多個分組集團通過子句,Databricks SQL生成一個單獨的分組通過對原函數做叉乘分組

嵌套分組分組子句,Databricks 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訂單通過idid總和數量--- -------------One hundred.322003330013——在GROUP by子句中使用列位置。>選擇id總和數量經銷商集團通過1訂單通過1id總和數量--- -------------One hundred.322003330013—多個聚合。——1。每個經銷商的數量總和。——2。每個經銷商的最大數量。>選擇id總和數量作為總和馬克斯數量作為馬克斯經銷商集團通過id訂單通過idid總和馬克斯--- --- ---One hundred.32152003320.300138——計算每個car_model在城市中不同經銷商的數量。>選擇car_model截然不同的城市作為經銷商集團通過car_modelcar_model------------ -----本田公民3.本田CRV2本田協議3.-每個經銷商的“本田思域”和“本田CRV”數量之和。>選擇id總和數量過濾器在哪裏car_model“本田思域”“本田CRV”))作為總和數量經銷商集團通過id訂單通過idid總和數量--- -------------One hundred.17200233005—在一條語句中使用多組分組列的聚合。——Following基於四組分組列執行聚合。——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——通過' ROLLUP '子句進行分組處理。——通過GROUPING SETS ((city, car_model), (city),()來等價分組>選擇城市car_model總和數量作為總和經銷商集團通過城市car_model彙總訂單通過城市car_model城市car_model總和--------- ------------ ---78都柏林33都柏林剛剛上市的10都柏林HondaCRV3.都柏林HondaCivic20.弗裏蒙特32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic1013剛剛上市的8HondaCivic5——通過' CUBE '子句進行分組。——通過GROUPING SETS ((city, car_model), (city), (car_model), ()>選擇城市car_model總和數量作為總和經銷商集團通過城市car_model多維數據集訂單通過城市car_model城市car_model總和--------- ------------ ---78剛剛上市的33HondaCRV10HondaCivic35都柏林33都柏林剛剛上市的10都柏林HondaCRV3.都柏林HondaCivic20.弗裏蒙特32弗裏蒙特剛剛上市的15弗裏蒙特HondaCRV7弗裏蒙特HondaCivic1013剛剛上市的8HondaCivic5——為ignore nulls準備數據示例>創建臨時視圖id的名字年齡作為One hundred.“瑪麗”),200“約翰。”30.),300“邁克”80),400“丹”50);——選擇列age中的第一行>選擇第一個年齡第一個年齡--------------------——獲取列' age '中的第一行忽略空值,列' id '中的最後一行和列' id '的和。>選擇第一個年齡忽略零位),最後的id),總和id第一個年齡真正的最後的id總和id------------------- ------------------ ----------30.4001000