zoukankan      html  css  js  c++  java
  • nvl(sum(字段),0) 的时候,能展示数据0,但是group by 下某个伪列的时候,查不到数据(转载)

    今天碰到一个比较有疑惑的问题,就是在统计和的时候,我们往往有时候查不到数据,都会再加个 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没有记录 就是没有记录 
     
  • 相关阅读:
    JavaScript 多个空格替换成1个空格
    「DIARY」NOI2021 小结
    kubernetes常用命令总结
    Qt绘图(使用QPainter)翻转图像的两种方法
    android 11 R framework 新特证 开发备忘
    浏览器的缓存机制
    记el-tree 懒加载复选框回显的坑
    VUE根据文件流下载EXC
    西瓜视频播放器VUE
    推荐系统打散算法--权重
  • 原文地址:https://www.cnblogs.com/nietzsche2019/p/11587439.html
Copyright © 2011-2022 走看看