简洁分组(HiveSQL)
数据表:t_dealer
province | city | dealer |
北京市 | 北京市 | 北京汽车销售有限公司 |
上海市 | 上海市 | 上海汽车销售有限公司 |
广东省 | 广州市 | 广州汽车销售有限公司 |
group by 对比 groupingsets
select province,city,count(1)
from t_dealer
group by province,city
grouping sets (
(province,city),
(province),
(city),
()
)
等价于
select province,city,count(1)
from t_dealer
group by province,city
union all
select province,null as city,count(1)
from t_dealer
group by province
union all
select null as province,city,count(1)
from t_dealer
group by city
union all
select null as province,null as city,count(1)
from t_dealer
GROUP BY 和 GROUPING SETS 都是用于对查询结果进行分组的语句,但它们在使用方式和应用场景上有所不同。
GROUP BY 通常用于对单个或多个列进行分组,它允许你指定一个或多个列作为分组条件。在查询结果中,每个分组条件只会出现一行记录,聚合函数可以用来对每个分组进行数据聚合。
GROUPING SETS 是 GROUP BY 的扩展,允许你定义多个数据分组。这样做使聚合更容易,并且使得多维数据分析更容易。GROUPING SETS 在同一查询中定义多个分组,通过对每个分组集中指定的组表达式的每个子集执行 GROUP BY,可以创建更灵活的分组方式。例如,GROUP BY A,B,C 等价于 GROUP BY A UNION GROUP BY B UNION GROUP BY C。
总的来说,如果只需要对单个或多个列进行简单分组,那么 GROUP BY 就足够了。然而,如果需要更灵活地定义多个分组,并且进行多维数据分析,那么 GROUPING SETS 是一个更好的选择。
cube 对比 groupingsets
select province,city,dealer,count(1)
from t_dealer
group by province,city,dealer
grouping sets (
(province,city,dealer),
(province,city),
(province,dealer),
(city,dealer),
(province),
(city),
(dealer),
()
)
等价于
select province,city,dealer,count(1)
from t_dealer
group by province,city,dealer
with cube
GROUP BY 和 CUBE 都是用于对查询结果进行分组的语句,但它们在使用方式和应用场景上有所不同。
GROUP BY 通常用于对单个或多个列进行分组,它允许你指定一个或多个列作为分组条件。在查询结果中,每个分组条件只会出现一行记录,聚合函数可以用来对每个分组进行数据聚合。
CUBE 是 GROUP BY 的扩展,允许你生成更丰富的聚合结果。与 GROUP BY 不同,CUBE 在所选列的所有可能的组合上进行分组,并生成相应的聚合结果。这使得 CUBE 成为处理多维数据的强大工具。
总的来说,如果只需要对单个或多个列进行简单分组,那么 GROUP BY 就足够了。然而,如果需要更灵活地处理多维数据并生成所有可能的组合,那么 CUBE 是一个更好的选择。
rollup对比 groupingsets
select province,city,dealer,count(1)
from t_dealer
group by province,city,dealer
grouping sets (
(province,city,dealer),
(province,city),
(province),
()
)
等价于
select province,city,dealer,count(1)
from t_dealer
group by province,city,dealer
with rollup
在Hive中,GROUP BY 和 ROLLUP 都是用于对查询结果进行分组的语句,但它们在使用方式和应用场景上有所不同。
GROUP BY 通常用于对单个或多个列进行分组,它允许你指定一个或多个列作为分组条件。在查询结果中,每个分组条件只会出现一行记录,聚合函数可以用来对每个分组进行数据聚
ROLL UP会从右到左逐个剔除字段形成上卷的分组