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年