GROUP BY子句

适用于:勾选“是”砖的SQL勾选“是”砖运行时

集团通过子句用于根据一组指定的分组表达式对行进行分组,并根据一个或多个指定的聚合函数对行组计算聚合。Databricks SQL还支持高级聚合,以便通过via对同一输入记录集进行多个聚合分组多维数据集汇总条款。分组表达式和高级聚合可以混合在集团通过子句并嵌套在分组条款。

在混合/嵌套分组分析一节中查看更多细节。

当一个过滤器子句附加到聚合函数时,只有匹配的行被传递给该函数。

语法

集团通过所有集团通过group_expression(,...汇总|多维数据集集团通过group_expression|汇总|多维数据集|分组grouping_set(,...(,...grouping_set表达式|表达式(,...

而聚合函数定义为

aggregate_name截然不同的表达式(,...过滤器在哪里boolean_expression

参数

  • 所有

    适用于:勾选“是”Databricks运行时12.1及以上

    一个简单的符号来添加所有选择-list表达式不包含聚合函数group_expressions.如果不存在该表达式集团通过所有等于省略集团通过子句,该子句导致全局聚合。

    集团通过所有不能保证生成一组可解析的组表达式。砖了UNRESOLVED_ALL_IN_GROUP_BYMISSING_AGGREGATION如果生成的子句不是格式良好的。

  • 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.——计算每个car_model在城市中不同经销商的数量,使用GROUP BY ALL>选择car_model截然不同的城市作为经销商集团通过所有car_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