写点什么

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

作者:数据库砖家
  • 2025-05-06
    广东
  • 本文字数:947 字

    阅读完需:约 3 分钟

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

一、函数作用

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

二、参数与返回值类型

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

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

三、NULL 值处理规则

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

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

四、使用 DISTINCT 与 ALL

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

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

示例:

SELECT AVG(employee_count) AS res FROM area1;-- 输出:333.333...SELECT AVG(DISTINCT employee_count) AS res FROM area1;-- 输出:350
复制代码

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

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

示例数据:

SELECT year, month, branch, revenue_total FROM finance_info;
复制代码

示例用法:

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 tonowFROM finance_info;
复制代码

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

六、AVG 嵌套使用说明

注意事项:

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

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

示例:

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 tonowFROM finance_infoGROUP BY year, month;
复制代码

七、实用建议

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

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

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

用户头像

还未添加个人签名 2025-04-09 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB|AVG 函数详解:轻松搞懂平均值怎么计算_数据库_数据库砖家_InfoQ写作社区