sql cookbook笔录(二)

来源:互联网 发布:黑猫警长知乎 编辑:程序博客网 时间:2024/05/17 22:06

第七章 使用数字

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 whered.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
 








0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脚痛风是怎么引起的 寻常疣是什么引起的 脂肪瘤是怎么引起的 脑垂体瘤是什么引起的 腰痛是什么原因引起的 坐骨神经痛怎么引起的 传染性软疣怎么引起的 左背痛是什么原因引起的 脑供血不足是怎么引起的 手臂发麻是什么原因引起的 小腿浮肿是什么原因引起的 腰椎管狭窄怎么引起的 脚后跟疼是什么原因引起的 腿痛有哪些原因引起 末梢神经炎怎么引起的 腿浮肿是什么原因引起的 血糖高是什么原因引起的 腰椎滑脱是什么引起的 坐骨神经痛是怎么引起的 肾功能不全怎么引起的 腰困是什么原因引起的 腰肌劳损是怎么引起的 泡疹是什么原因引起的 嘴唇疱疹是怎么引起的 肾功能衰竭是怎么引起的 带状疱疹是什么引起 坐骨神经痛是怎样引起的 病毒性软疣怎么引起的 坐骨神经疼是什么引起的 坐骨神经是怎么引起的 腰椎管狭窄是什么引起的 病毒性疱疹怎么引起的 衣原体感染怎么引起的 颈椎痛是什么原因引起的 腰部带状疱疹是怎么引起的 妇科囊肿是什么引起的 胆囊息肉是什么引起的 阴毛囊炎是怎么引起的 急性咽炎是什么引起的 面部神经炎怎么引起的 小孩脑瘫是什么引起的