SQL 计算平均值

您所在的位置:网站首页 象形字查询表 SQL 计算平均值

SQL 计算平均值

2024-06-02 19:46| 来源: 网络整理| 查看: 265

SQL 计算平均值,你想计算某一列的平均值,可能针对表中的全部记录,也可能只针对部分记录。例如,你希望知道全部员工的平均工资,同时也想知道每个部门的平均工资。

SQL 计算平均值 问题描述

你想计算某一列的平均值,可能针对表中的全部记录,也可能只针对部分记录。例如,你希望知道全部员工的平均工资,同时也想知道每个部门的平均工资。

SQL 计算平均值 解决方案

为了计算所有员工的平均工资,只需要针对 SAL 列调用 AVG 函数即可。由于没有使用 WHERE 子句,因此 AVG 函数会计算所有非 Null 值的平均值。

1 select avg(sal) as avg_sal 2 from emp   AVG_SAL ---------- 2073.21429

为了计算每个部门的平均工资,需要使用 GROUP BY 子句来对部门进行分组。

1 select deptno, avg(sal) as avg_sal 2 from emp 3 group by deptno   DEPTNO AVG_SAL ---------- ---------- 10 2916.66667 20 2175 30 1566.66667 SQL 计算平均值 扩展知识

针对整个表计算平均值时,只要对感兴趣的列执行 AVG 函数即可,而且不需要使用 GROUP BY 子句。请记住,AVG 函数会忽略 Null。下面的例子演示了 Null 被忽略之后的结果。

create table t2(sal integer) insert into t2 values (10) insert into t2 values (20) insert into t2 values (null)   select avg(sal) select distinct 30/2 from t2 from t2   AVG(SAL) 30/2 ---------- ---------- 15 15   select avg(coalesce(sal,0)) select distinct 30/3 from t2 from t2   AVG(COALESCE(SAL,0)) 30/3 -------------------- ---------- 10 10

COALESCE 函数会返回其参数列表中的第一个非 Null 值。如果是 Null,则 SAL 的值为 0,这样平均值的计算结果也会发生变化。当使用聚合函数的时候,一定要先想一下如何处理 Null。 本解决方案的第二部分使用 GROUP BY(第 3 行)依据部门从属关系把员工数据分为若干组。GROUP BY 使得像 AVG 这样的聚合函数自动为每一个分组返回一个结果。本例中,AVG 函数将针对按照部门分组后的每一组员工数据进行计算。 顺便说一下,不一定非要把 GROUP BY 列放到 SELECT 列表里。来看下面这个例子。

select avg(sal) from emp group by deptno   AVG(SAL) ---------- 2916.66667 2175 1566.66667

尽管 DEPTNO 没有被放在 SELECT 子句里,但是我们仍然按照该列分组。把用于分组的列放入 SELECT 子句通常有助于提高可读性,但这并不是必需的。反之则不然,不能把 GROUP BY 子句里没有的列放入 SELECT 列表。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3