首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >YashanDB|AVG 函数详解:轻松搞懂平均值怎么计算

YashanDB|AVG 函数详解:轻松搞懂平均值怎么计算

原创
作者头像
数据库砖家
发布2025-05-06 14:25:48
发布2025-05-06 14:25:48
31500
代码可运行
举报
运行总次数:0
代码可运行

在日常的数据统计与报表分析中,平均值是最常见的聚合指标之一。YashanDB 提供的 AVG(expr) 函数,用于计算给定表达式的平均值,支持多种数据类型与窗口分析能力。本文将带你全面了解它的用法与注意事项。

一、函数作用

AVG(expr) 用于计算输入表达式在数据集中的平均值。既可以作为聚合函数处理整列数据,也可以作为窗口函数返回分组内的滑动平均。

二、参数与返回值类型

如果 expr 为不能转换为数值的字符串,则会返回 Invalid number 错误;

对不支持的类型(如日期、布尔、JSON 等),该函数不可用。

三、NULL 值处理规则

单行表达式:如果 expr 为 NULL,结果为 NULL;

多行聚合:自动忽略 NULL 值,若所有值均为 NULL,则结果为 NULL。

四、使用 DISTINCT 与 ALL

AVG(DISTINCT expr):排除重复值后再求平均;

AVG(ALL expr):默认行为,包含所有非空行。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT AVG(employee_count) AS res FROM area1;
-- 输出:333.333...
SELECT AVG(DISTINCT employee_count) AS res FROM area1;
-- 输出:350

五、作为窗口函数使用(AVG + OVER)

使用 OVER 子句时,AVG() 可以作为窗口函数,用于按组进行滑动平均计算。

示例数据:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT year, month, branch, revenue_total FROM finance_info;

示例用法:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT year, month,
       revenue_total AS curr,
       AVG(revenue_total) OVER (
           PARTITION BY year
           ORDER BY month
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
       ) AS tonow
FROM finance_info;

该语句会按年份分组,并基于月份按顺序累计计算平均收入。

六、AVG 嵌套使用说明

注意事项:

AVG() 函数不支持嵌套写法,如 AVG(AVG(...));

如果需要类似效果,请使用外层 GROUP BY + 内层窗口函数组合实现。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT year, month,
       AVG(revenue_total) AS curr,
       AVG(AVG(revenue_total)) OVER (
           PARTITION BY year
           ORDER BY month
           ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
       ) AS tonow
FROM finance_info
GROUP BY year, month;

七、实用建议

建议在数值类型字段上使用 AVG,避免字符转换错误;

使用窗口函数时,结合 PARTITION BY + ORDER BY 更能体现 AVG 的统计价值;

注意 NULL 的默认过滤行为,必要时可通过 NVL() 做空值替代处理。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档