1. 程式人生 > >7.01 計算平均值

7.01 計算平均值

例如 sele 問題: insert tin value ger emp 0.00

問題:計算某個列的平均值,它可以包含表中的所有行,也可以只包含其中的某個子集。例如,計算所有職員的平均工資以及每個部門的平均工資。

解決方法:當計算所有職員的平均工資時,只需要把AVG函數應用於工資列即可。
select avg(sal) as avg_sal from emp group by deptno;

要計算每個部門的平均工資,需使用GROUP BY子句,它按每個部門創建分組:
select deptno,avg(sal) as avg_sal from emp group by deptno;

討論:
如果以整個表作為一個組或一個窗口計算平均值,則只需對相應列使用AVG函數,而不要使用GROUP BY子句。請註意,AVG函數會忽略NULL值。

create table t2(sal integer);
insert into t2 values(10);
insert into t2 values(20);
insert into t2 values(null);

select distinct 30/2 from t2;
+---------+
| 30/2 |
+---------+
| 15.0000 |
+---------+

select avg(coalesce(sal,0)) from t2;
+----------------------+
| avg(coalesce(sal,0)) |
+----------------------+
| 10.0000 |
+----------------------+

COALESCE函數會返回參數列表中的第一個非NULL值。如果把SAL值中的NULL轉換為0,平均值就會改變。
順便提一下,GROUP BY依據的列不一定要包含在SELECT列表中,例如:
select avg(sal) from emp group by deptno;
+--------------------+
| avg(sal) |
+--------------------+
| 2916.6666666666665 |
| 1566.6666666666667 |
+--------------------+

即使在SELECT子句中不包含DEPTNO,也可以按它分組。

7.01 計算平均值