如何在PostgreSQL命令行直接输入多值调用聚合函数AVG?
PostgreSQL中AVG函数多值计算的正确用法
首先明确:PostgreSQL的AVG()是聚合函数,它的设计是对一组行中的某一列值计算平均,不是直接接收多个独立参数——这就是你SELECT AVG(1,NULL,2,3);报错的核心原因,AVG仅接受单个参数(列名或单个表达式)。
正确计算多个值(含NULL)平均的写法
如果要计算1、NULL、2、3这几个值的平均,有两种常用实现方式:
方法1:用VALUES构造临时表再聚合
SELECT AVG(val) FROM (VALUES (1), (NULL), (2), (3)) AS temp_table(val);
执行后结果为2,因为AVG会自动忽略NULL值,实际计算的是(1+2+3)/3=2。
方法2:用数组+unnest函数展开
SELECT AVG(val) FROM unnest(ARRAY[1, NULL, 2, 3]) AS val;
原理和上方一致:将数组转换成行数据集后再计算平均,同样会自动跳过NULL。
关于NULL值的说明
AVG完全支持处理包含NULL的数据集,PostgreSQL所有标准聚合函数(SUM、COUNT、AVG等)在计算时都会自动忽略NULL值,不会将其纳入计算范围。你之前的SELECT AVG(2);能正常运行,是因为它等价于对一个仅含一行、值为2的列计算平均,结果自然是2。
内容的提问来源于stack exchange,提问作者mangoUnchained
相关产品推荐
相关产品推荐

