
示例学生成绩表
SQL的数据类型隐式转换

利用这一小技巧,在实现很多统计指标时就可以有很多小技巧。例如计算学生成绩表中每名学生的成绩的优秀率,即成绩在90分以上的科目与本人总科目的占比。为实现这一查询,常规的操作是分别统计每名学生成绩在90分以上的科目数量和总科目,然后进行相除得到占比。
其中,在每名学生的分组中,条件判断score>=90返回一组0或1的结果,对这组0/1取值进行求均值操作,即等价于求成绩>=90的科目占比。
巧妙运用if函数和null
SQL内置了众多函数,但对于一名程序员而言if函数应该尤为常见和常用;另一方面,null值也是SQL中一个神奇的存在,它有两大特性:一是任何值与null的任何计算都会得到null值;二是在任何聚合函数中,null值都不参与计算(例如,count计数就是查找null以外的结果数量)。配合使用if函数和null值,有时也可实现很好的效果。

实际上,上述查询语句中,首先通过if函数衍生一个临时字段if(score>=80, score, null)其取值为:成绩≥80时取成绩值,否则置为null,即相当于仅保留了成绩在80分以上的记录;而后嵌套一层avg函数即直接实现了计算80分以上平均值的效果。
End.
作者:luanhz
本文为转载分享,如果涉及作品、版权和其他问题,请联系我们第一时间删除(微信号:lovedata0520)
更多文章前往首页浏览http://www.itongji.cn/
- 我的微信公众号
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论