聚合函数是数据处理与分析中的核心工具,其通过将多行数据映射为单一值,实现数据汇总与特征提取。随着多平台数据架构的复杂化,聚合函数的类型已从基础统计扩展至高阶数据分析场景。当前主流数据库及分析工具支持的聚合函数可归纳为八大类别:基础数值聚合(SUM/AVG/COUNT)、统计分布聚合(STDDEV/VARIANCE)、字符串聚合(GROUP_CONCAT/STRING_AGG)、窗口函数聚合(RANK/DENSE_RANK)、分组扩展聚合(ROLLUP/CUBE)、条件过滤聚合(CASE WHEN)、自定义聚合(UDF/UDAF)以及高级分析聚合(BIT_AND/PERCENTILE)。这些类型在功能边界、计算逻辑及适用场景上存在显著差异,例如MySQL的GROUP_CONCAT与PostgreSQL的STRING_AGG均用于字符串合并,但前者受group_concat_max_len参数限制,后者支持ORDER BY排序;而窗口函数聚合(如RANK() OVER)则突破传统分组限制,实现滑动窗口内的动态排名。

聚	合函数有哪些类型

一、基础数值聚合函数

基础数值聚合函数提供最通用的数据汇总能力,涵盖求和(SUM)、平均值(AVG)、计数(COUNT)、最大值(MAX)与最小值(MIN)。

函数类型典型函数返回值特征空值处理规则
求和SUM(column)数值型总和自动忽略NULL
平均值AVG(column)浮点数均值忽略NULL后计算
计数COUNT(*)整数型总量不过滤NULL
极值MAX(column)/MIN(column)数值型边界值忽略NULL参与计算

该类函数具有普适性,但需注意COUNT(column)与COUNT(*)的差异:前者仅统计非空值,后者包含所有行。例如在电商订单数据中,SUM(price)计算总销售额,AVG(rating)获取平均评分,MAX(create_time)提取最新订单时间。

二、统计分布聚合函数

用于描述数据分布特征的聚合函数,包含标准差(STDDEV)、方差(VARIANCE)、协方差(COVAR_POP/COVAR_SAMP)及中位数(MEDIAN)。

函数类型SQL标准计算基数典型应用
标准差STDDEV_POP/STDDEV_SAMP总体/样本质量检测波动分析
方差VAR_POP/VAR_SAMPN/(N-1)金融风险评估
中位数PERCENTILE_CONT(0.5)排序后中间值收入水平分析
协方差COVAR_SAMP(x,y)样本协方差投资组合相关性

该类函数在BI工具中常用于构建六西格玛分析模型。例如计算生产线良品率的标准差时,需区分STDDEV_SAMP(样本估计)与STDDEV_POP(全量统计),错误使用会导致过程能力指数(CPK)计算偏差。

三、字符串聚合函数

处理文本数据的聚合函数,核心功能包括字符串连接(GROUP_CONCAT)、数组聚合(ARRAY_AGG)、JSON聚合(JSON_MERGE_PRESERVE)。

函数类型语法示例长度限制排序支持
连接符聚合GROUP_CONCAT(name SEPARATOR ',')默认1024字节需配合ORDER BY
数组聚合ARRAY_AGG(tag)无长度限制保留原始顺序
JSON聚合JSON_MERGE_PRESERVE('name', 'tag')依赖JSON大小键值自动合并

在日志分析场景中,GROUP_CONCAT可将同一用户的搜索关键词合并为逗号分隔字符串,而ARRAY_AGG则保留原始顺序生成数组。值得注意的是,Oracle的LISTAGG函数需要显式指定ON OVERFLOW TRUNCATE防止超出4000字符限制。

四、窗口函数聚合

基于滑动窗口机制的聚合函数,典型代表包括RANK()、DENSE_RANK()、ROW_NUMBER()及NTILE()。

函数类型排序规则并列处理结果范围
标准排名ORDER BY列跳过并列值1,2,4,...
密集排名同上连续编号1,2,3,...
行号同上强制唯一1,2,3,...
分桶同上均分数据1~N等分

在赛事排名系统中,RANK()会跳过相同得分产生的名次空缺(如并列第二则后续为第四),而DENSE_RANK()保持连续编号。窗口函数需结合OVER子句定义分区范围,例如计算每个部门内的工资排名:RANK() OVER (PARTITION BY department ORDER BY salary DESC)。

五、分组扩展聚合

支持多维度分组的增强型聚合,包含ROLLUP、CUBE及GROUPING SETS。

多层报表汇总数据立方体生成非对称分组需求
扩展类型生成规则维度组合数适用场景
ROLLUP层级递进组合n+1种(n维)
CUBE全维度排列组合2^n种
GROUPING SETS自定义维度集合灵活配置

在销售数据分析中,CUBE(year, quarter, month)会生成包含所有维度组合的15种聚合结果,而ROLLUP(year, quarter, month)仅产生4种层级汇总。该特性在数据仓库ETL过程中,可显著减少立方体构建的存储开销。

六、条件过滤聚合

通过WHERE/HAVING子句或CASE表达式实现条件筛选的聚合方式。

过滤类型语法特征执行阶段典型应用
前置过滤WHERE条件聚合前筛选有效订单统计
后置过滤HAVING条件聚合后筛选高价值客户识别
嵌套条件CASE WHEN行级判断状态分类统计

在漏斗分析场景中,需先用WHERE过滤无效行为(如停留时长<5秒的访问),再按CASE WHEN对转化路径分类,最终用HAVING筛选转化率低于阈值的渠道。这种三级过滤机制可精准定位业务瓶颈。

七、自定义聚合函数

通过用户自定义函数(UDF/UDAF)扩展的聚合能力,满足复杂业务需求。

实现方式适用平台性能特征典型应用
SQL UDFPostgreSQL/Snowflake中等性能文本相似度计算
Java UDAHive/Spark高吞吐量去重计数(HyperLogLog)
Python UDFBigQuery/Redshift低延迟实时异常检测

在推荐系统中,可通过Python UDF实现协同过滤算法:将用户行为向量作为输入,计算余弦相似度后进行TOP N聚合。相比原生聚合函数,自定义实现可提升算法灵活性,但需注意分布式环境下的状态管理问题。

八、高级分析聚合函数

面向数据科学领域的专用聚合函数,包括百分位数(PERCENTILE_CONT)、直方图(HISTOGRAM)、Top N(FIRST/LAST_VALUE)等。

收入分布分析流量带宽监控热搜榜单生成
函数类型数学原理输出形式应用场景
百分位数线性插值法精确值/近似值
直方图等宽分箱频次数组
Top N聚合优先级队列多列结果集

在实时风控系统中,PERCENTILE_CONT(0.99)可快速计算交易金额的99百分位值,作为异常交易的阈值参考。而HISTOGRAM(timestamp, 100)能将日志时间戳划分为每100ms的区间,统计请求量分布特征。

通过上述八大类聚合函数的体系化梳理,可见现代数据处理平台已形成丰富的聚合能力矩阵。从基础统计到高级分析,各类函数在空值处理、计算精度、资源消耗等方面存在显著差异。实际使用时需综合考虑数据规模(如HIVE处理TB级数据宜用MAPREDUCE UDF)、业务需求(实时场景优先选择近似聚合)及平台特性(如Oracle不支持PERCENTILE_CONT)。未来随着流计算与AI融合,预计会出现更多支持增量计算、模型推理的智能聚合函数形态。