博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
7.01 计算平均值
阅读量:7087 次
发布时间:2019-06-28

本文共 1031 字,大约阅读时间需要 3 分钟。

问题:计算某个列的平均值,它可以包含表中的所有行,也可以只包含其中的某个子集。例如,计算所有职员的平均工资以及每个部门的平均工资。

解决方法:当计算所有职员的平均工资时,只需要把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,也可以按它分组。

转载于:https://www.cnblogs.com/liang545621/p/7523230.html

你可能感兴趣的文章
gitlab旧服务器停机状态下,迁移gitlab服务
查看>>
linux命令学习——md5sum
查看>>
leetcode Restore IP Addresses
查看>>
螃蟹学PHP设计模式之外观模式
查看>>
[转]iOS提高UITableview滑动性能
查看>>
struts 拦截器
查看>>
java集合 set list map
查看>>
常用数据库优化
查看>>
Qt学习之路(2):Hello, world!
查看>>
CSS3阴影 box-shadow的使用和技巧总结
查看>>
easyui datagrid 初始化排序按钮不显示的问题
查看>>
5分钟GET一场清华大数据讲座实战应用案例干货
查看>>
测者的测试技术手册:自动的自动化框架EvoSuite集成Cobertura得到可视化的代码覆盖报告...
查看>>
集成LinearLayout时遇到的问题
查看>>
设计模式之——策略模式(Strategy)
查看>>
单利模式的好处
查看>>
Microsoft Silverlight 官方版
查看>>
Hibernate中*.hbm.xml文件让其自动读取数据库默认值
查看>>
windows 安装redis
查看>>
oracle常用函数汇总
查看>>