Presto/Hive中如何编写SQL查询分组聚合生成数组
Presto 分组聚合字段为数组的SQL实现
核心使用Presto内置的array_agg聚合函数即可实现需求,该函数会按分组规则,将同组内指定字段的所有值收集为数组类型,输出格式与要求的["Apple","Orange"]完全一致。
假设存储数据的源表名为product,可直接使用如下SQL:
SELECT Type, array_agg(name) AS name_array FROM product GROUP BY Type;
针对给出的两条测试数据(Type均为Fruit,name分别为Apple、Orange),执行上述SQL后返回结果为:
| Type | name_array |
|---|---|
| Fruit | ["Apple","Orange"] |
常见扩展用法
- 如需对数组内元素排序,可在
array_agg中增加ORDER BY子句:-- 按name字段字典序升序排列数组元素 array_agg(name ORDER BY name) AS name_array - 如需对同组内的name值去重后再聚合,增加
DISTINCT关键字即可:array_agg(DISTINCT name ORDER BY name) AS name_array - 如果不需要保留null值,可在WHERE子句中提前过滤,避免数组中出现null元素:
SELECT Type, array_agg(name ORDER BY name) AS name_array FROM product WHERE name IS NOT NULL GROUP BY Type;
内容的提问来源于stack exchange,提问作者user19460554
相关产品推荐
相关产品推荐

