进入后端工作有一段时间了,目前在做一些逻辑简单的接口开发,这次又增加了定时任务,既激动又担心自己搞砸了。也许从一开始就应该将自己遇到的问题记录下来的,奈何自己太担心自己出问题,总是想着以项目进度为重。
其实后端涉及到的技术也蛮多的,慢慢查漏补缺把。
一、SQL中的平均数
表数据如下:
1、求平均年龄 avg
SELECT AVG(age) as avgAge from user
2、求课程的平均分 SQL除法: ROUND(num1/num2,2)
注意:课程平均分=课程总分/课程门数
SELECT ROUND(sum(totalScore)/sum(courseNum),2) from user
二、where or having
where很好理解,查询过滤的条件嘛,但是having呢?据说也是查询过滤的条件,有什么区别吗?
查找资料,我比较认可的说法: where 是group by之前进行筛选,having是group by 之后进行统计的筛选(https://www.cnblogs.com/janneystory/p/5619100.html),理解下,感觉是这样的:
where只能对当前查询表中现有的字段进行过滤,比如,查询学生表中成绩大于60分的学生:where score>60;而group by则是把当前查询表统计后的结果作为条件进行过滤,比如,查询平局成绩超过60分的班级:group by className having avg(score)
三、not in 和null的相遇
需求:
统计一张user_info表中居住地址(精确到市)属于陕西省的人数和不属于陕西省的人数;
实现思路:
属于陕西省的:cityCode in( 陕西省code);
不属于陕西省的:cityCode not in( 陕西省code);
然鹅,突然,产品小姐姐说,居住地址可以为空的,为空就为空呗,改下数据库的表就行了,结果,测试小姐姐说你这计算结果不对呀,不属于陕西省的人数有时候是对的,有时候又不对……万能的debug也没能解决,组长看我着急半天,说我看下你的SQL……这好像不太对呀,怎么不对了?(当时的内心是怎么可能不对呢?逻辑上没有任何毛病呀)这个not in有问题,啥问题呀?不属于难道不是not in吗?当这个字段值为null 时,不属于陕西省,但是此时你用not in也统计不到呀!嗯~好像也是,那要怎么写?这个,我只看到过几次,没用过,你百度下吧。
知道问题产生的原因,很快就解决了,万万没想到竟然在毫不起眼的not in翻车了……
统计不属于时,即就是使用not in时,如果某个字段为null,则不会统计在内,正确的做法是要兼容null和not in 即就是:(字段名 is null or 字段名 not in(XXX))
……
and
(filledName is null
or filledName not in [x,y,z])
……