今天碰到一个比较有疑惑的问题,就是在统计和的时候,我们往往有时候查不到数据,都会再加个 nvl(sum(字段),0) 来显示这个字段,但是如果我们再加个group by ,就算有加入这个 nvl(null,0) 的这个函数,也查不到一条数据的疑惑进行解释如下:
1 首先我们查下这个语句:是查不到一条数据的如下图:
select a.area_code, a.calltimes,a.queuetimes
from ngcc_log.t_rpt_call4traffic_xm a
where a.flowid=12
2 然后我们再加个函数来sum 下,然后再加个nvl,这样是查得出数据的,也就是说,为空的我们显示为 0
select nvl(sum(l.calltimes),0)calltimes,nvl(sum(l.queuetimes),0)queuetimes
from ( select a.area_code,
a.calltimes,a.queuetimes
from ngcc_log.t_rpt_call4traffic_xm a
where a.flowid=12)
3 然后我们再来group by 下 一个常亮,或者伪列,或者含有的字段:
1. group by 已有的字段
2。group by 伪列

我们可以看到都是为空的,也就是查不到数据了。
这是为啥:
首先这里我们要清楚SQL解析的顺序 其次你要知道伪列的作用。
我们这里来举例一个简单点列子:
比如说这是一张表 :
select sum(v_value) from wtf group by '50' 就相当于:
select sum(v_value) from (select v_value, '50' from wtf) group by '50';
所以这边sql 是先解析成
select v_value, '50' from wtf
'50'是生成的一个伪列
'50'是一个groupId sum(v_value)是一个值
你不加group by '50' 相当于sum全表的数 如果有where1=2 就是sum出来的空
加group by ‘50’就是按'50'group by没有记录 就是没有记录
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31369373/viewspace-2153302/
,如需转载,请注明出处,否则将追究法律责任。