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年