sql cookbook笔录(二)

本文介绍SQL中数值计算的各种技巧,包括平均值、最大值、最小值的计算方法,如何求表的行数、生成累计和及累计积,计算模式、求总和的百分比等,并探讨如何处理NULL值及排除最大最小值的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第七章 使用数字

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
 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值