sql cookbook笔录(二)
2015-11-10 15:09
246 查看
第七章 使用数字
7.1 计算平均值
avg函数计算会忽略null值,coalesce(sal,0)函数会返回值列表中,第一个不为null的数。如果这样做,平均值就会改变。7.2 求最大值,最小值
出现在select列表中的列(不包括聚合函数列),都必须出现在group by 子句中。7.4 求一个表的行数
使用count(*) 或者常量会把null的行也包含进来,如果count(sal)传入列名,会把这一列是null的行,忽略掉。7.6 生成累计和
MySql使用标量子查询 查询语句中一定要按取值唯一的列连接,否则会有问题select e.ename,e.sal,(select sum(d.sal) from emp d where
d.empno<=e.empno) as running_total
from emp e order by 3 。
7.7 生成累计积
计算各个列的积把上面函数中的sum函数 换成exp(sum(ln(d.sal))) 。
7.9 计算模式
模式就是出现次数最多的,考虑如下数据sal
----
700
600
800
800
上面数据的模式就是800.
select sal from emp e group by sal having count(*) >= all(select count(*) from emp e group by sal)。
7.11 求总和的百分比
求特定列占总和的百分比,在sum函数中使用case,相当于条件查询一样。SELECT sum(case WHEN idA=3 then money
end ) as dd,sum(money) from a
这个查询可以查到ida为3
的money总和,也就是除数,后面的sum是所有的总和。
要得到占的百分比,可以这样做。
select sum(case when idA=3 then monty end)/sum(monty) from a 把他们二个相除就好了。
7.12 计算中考虑null值
聚集函数会忽略null值,可以使用coalesce函数来取代是null值得列。得到正确的结果。7.13 计算不包括最大值和最小值的均值
select avg(sal) from emp where sal not in((select max(sal) from emp),(select min(sal) from emp))上面的sql会把重复的最大值,最小值全部排除,如果只想排除一个最大值,最小值,可以在总和中
减去一个最大值,一个最小值,再求平均值。
select (sum(sal)-max(sal)-min(sal))/(count(*)-2) from emp
相关文章推荐
- SQL中的三值逻辑
- SQL Server 作业批量停止
- 结束SQL阻塞的进程
- 动态生成SQL Server视图作业
- SQL Server 语句操纵数据库
- SQL(结构化查询语句)
- oracle sql日期比较
- linux快速部署mysql服务器
- sql 存储过程分页
- 在WINXP系统上安装SQL Server企业版的方法
- 通过批处理调用SQL的方法(osql)
- SQL Server 存储过程的分页
- ASP程序与SQL存储过程结合使用详解
- SQL SERVER编写存储过程小工具
- 防御SQL注入攻击时需要注意的一个问题
- PostgreSQL教程(十九):SQL语言函数
- SQL Server复制需要有实际的服务器名称才能连接到服务器
- SQL Server 2000向SQL Server 2008 R2推送数据图文教程