java项目开发路上的小石子

        进入后端工作有一段时间了,目前在做一些逻辑简单的接口开发,这次又增加了定时任务,既激动又担心自己搞砸了。也许从一开始就应该将自己遇到的问题记录下来的,奈何自己太担心自己出问题,总是想着以项目进度为重。

       其实后端涉及到的技术也蛮多的,慢慢查漏补缺把。    

一、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])
         ……
        

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值