PostgreSQL avg() 函数使用指南

PostgreSQL avg() 函数是一个聚合函数,它计算一个分组中的所有指定的值的平均值并返回。

avg() 语法

这里是 PostgreSQL avg() 的语法:

avg(expr)

我们通常在 SQLite 中按如下方式使用 avg() 函数:

SELECT avg(expr), ...
FROM table_name
[WHERE ...]
[GROUP BY group_expr1, group_expr2, ...];

参数

expr
必需的。一个计算平均值的列名或者表达式。

返回值

PostgreSQL avg() 函数返回一个分组中的所有指定的值的平均值。

avg() 示例

为了演示 PostgreSQL avg() 的用法,我们使用以下 UNIONSELECT 语句模拟一个表:

SELECT 'Tim' name, 'Math' subject, 8 grade
UNION
SELECT 'Tim' name, 'English' subject, 9 grade
UNION
SELECT 'Tom' name, 'Math' subject, 7 grade
UNION
SELECT 'Tom' name, 'English' subject, 5 grade;
 name | subject | grade
------+---------+-------
 Tim  | English |     9
 Tom  | Math    |     7
 Tim  | Math    |     8
 Tom  | English |     5
(4 rows)

这里,我们拥有了关于用户成绩的一些行。其中 name 列中是用户的名称, subject 列中是科目的名称, grade 列中是一个科目的成绩。

如果要获得所有人的平均成绩,请使用以下带有 avg() 函数的语句:

SELECT
  avg(t.grade) average_grade
FROM
  (
    SELECT 'Tim' name, 'Math' subject, 8 grade
    UNION
    SELECT 'Tim' name, 'English' subject, 9 grade
    UNION
    SELECT 'Tom' name, 'Math' subject, 7 grade
    UNION
    SELECT 'Tom' name, 'English' subject, 5 grade
  ) t;
   average_grade
--------------------
 7.2500000000000000
(1 row)

如果要获得每个人的平均成绩,请使用以下带有 avg() 函数的语句:

SELECT
  t.name,
  avg(t.grade) average_grade
FROM
  (
    SELECT 'Tim' name, 'Math' subject, 8 grade
    UNION
    SELECT 'Tim' name, 'English' subject, 9 grade
    UNION
    SELECT 'Tom' name, 'Math' subject, 7 grade
    UNION
    SELECT 'Tom' name, 'English' subject, 5 grade
  ) t
GROUP BY t.name;
 name |   average_grade
------+--------------------
 Tim  | 8.5000000000000000
 Tom  | 6.0000000000000000
(2 rows)

这里,我们使用 GROUP BY t.name 子句按照用户的名称进行了分组,并使用 avg(t.grade) 函数计算了对每组中的成绩的平均值。