关于group by后 count(*) 某一组 指定条件下,记录为0,而返回结果不显示的解决办法

遇到的问题是,在日期从2017.6.15--2017.6.21,有很多个站点,站点中每天不定条数的数据,其中有个空气指数的字段。

需求是要求统计出,这期间的每一天,空气指数超过3级的数据条数。

开始我写的是

select t.createtime_time, count(*)
  from airAppraise t
 where to_char(t.createtime_time, 'yyyy-mm-dd') >= '2017-06-15'
   and to_char(t.createtime_time, 'yyyy-mm-dd') <= '2017-06-21'
   and t.wqi > 3
 group by t.createtime_time
 order by t.createtime_time asc


会发现少了两天的记录,那两天的记录为0.主要的问题是出在  select 语句的时候,where先执行了t.wqi>3.因此压根就不会有没记录的那两天进行count(*).

百度了许多,还找错了个解决方案,我这数据库是oracle的,而找到的是sqlserver的。怎么弄到报错,最后才发现。所以语句还是挺大差别的。

也有试过从外连接入手,但是尝试多次都失败了,最后在一个帖子的回复中找到的启示,用到了自己的代码上,忘了出处了。

修改后的语句,在sum中里面直接写逻辑判断。。

select t.createtime_time,

       sum(case
             when t.wqi > 3 then
              1
             else
              0
           end)
  from airAppraise  t
  where to_char(t.createtime_time, 'yyyy-mm-dd') >= '2017-06-15'
   and to_char(t.createtime_time, 'yyyy-mm-dd') <= '2017-06-21'
 group by t.createtime_time

 order by t.createtime_time asc

最后结果想要的结果也就出来了



新手,有错望指正,虚心学习,分享下自己碰到的问题,既可以备用,也可以当作小白成长过程吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值