GROUP BY 在聚集函数中遇到Null值的小问题解析
来源:互联网 发布:淘宝曲度腰椎治疗仪 编辑:程序博客网 时间:2024/05/21 07:11
Null值属于任何类型,它和空字符不一样,空字符它是属于varchar2的数据类型,但是null可以是任何数据类型,因此在处理空值的时候特别要小心。
示例:在oracle中的模版示例中有emp表,我们知道有一列deptno列,但是其中没有任何一个员工,因此对它进行group by 的时候,如果不加group by 的时候, 它会返回一行数据,但是如果加了结果就不是预想的那样了。
来做一个演示:
统计deptno为40的合计工资和数量
SQL> select count(*),sum(sal) from emp_2 where deptno=40; COUNT(*) SUM(SAL)---------- ---------- 0SQL>
发现返回了一行数据,但是sum(sal)列为空,没有数据。
那么如果对它进入group by 呢?
SQL> select count(*),sum(sal) from emp_2 where deptno=40 group by deptno;no rows selectedSQL>
提示说:未选定的行,可以说明,当在错误的位置加入了group by语句,那么Oracle将会报错。
我们可以使用PL/SQL进行处理一下:
首先没有加group by的时候:
SQL> declare 2 v_sal emp_2.sal%type; 3 begin 4 select sum(sal) into v_sal from emp_2 where deptno=40; 5 dbms_output.put_line('v_sal = '||v_sal); 6 end; 7 /v_sal =PL/SQL procedure successfully completed.
可以看到,它是有返回值的,但是这个值为空。
现在尝试加入group by 来验证一下:
SQL> declare 2 v_sal emp_2.sal%type; 3 begin 4 select sum(sal) into v_sal from emp_2 where deptno=40 group by deptno; 5 dbms_output.put_line('v_sal = '||v_sal); 6 end; 7 /declare*ERROR at line 1:ORA-01403: no data foundORA-06512: at line 4SQL>
发现在执行PL/SQL块时,Oracle报错,所以null的处理一定要注意,在写PL/SQL程序的时候一定要加入异常。
因为时不可预知的。
所以这样处理就能正常显示:
SQL> declare 2 v_sal emp_2.sal%type; 3 v_sqlcode number(10); 4 v_sqlerr varchar2(50); 5 begin 6 select sum(sal) into v_sal from emp_2 where deptno=40 group by deptno; 7 dbms_output.put_line('v_sal = '||v_sal); 8 exception 9 when NO_DATA_FOUND then 10 v_sqlcode := SQLCODE; 11 v_sqlerr := SQLERRM; 12 dbms_output.put_line('SQLCODE >> ORA-'||v_sqlcode||chr(13)||'SQLERR >> '||v_sqlerr); 13 end; 14 /SQLERR >> ORA-01403: no data foundPL/SQL procedure successfully completed.SQL>
上面定义了一个SQL异常代码输出变量,所以通过引起的异常我们就能直到到底是哪儿出问题了。
以上就是对于这个group by在聚集函数中碰到空值问题的小剖析。
阅读全文
0 0
- GROUP BY 在聚集函数中遇到Null值的小问题解析
- oracle数据库的sql平时遇到的一些小问题union,to_char(),null last,group by
- 关于group by 与 聚集函数
- mysql中group by 的用法解析
- group by 中很好的函数
- mysql GROUP BY 代替DISTINCT 遇到的问题及解决
- cnblog 的小问题 - 尽在 null 中
- cnblog 的小问题 - 尽在 null 中
- 项目中遇到的mysql group by having
- 遇到在html中取值时,值为null的问题
- 解决infobright 的group by 因为NULL值,会出现两条一样的结果的问题
- Mysql GROUP BY NULL
- sql中distinct与group by的用法解析
- freemarker中遇到NULL的问题
- 学习python中map函数遇到的小问题
- 在开发过程中界面上遇到的小问题
- 在毕设过程中遇到的几个小问题
- 在CSS中遇到的一个小问题
- 机器学习常用算法
- js try catch实例
- Java装饰模式
- cmd 修改编码小结
- java实现对象排序
- GROUP BY 在聚集函数中遇到Null值的小问题解析
- python命令行执行 .py文件提示ModuleNotFoundError: No module named 'XXX' 解决方法
- TCP\IP、Http、Socket的区别
- 【BZOJ 1566】: 【NOI2009】管道取珠 另类DP
- 天气预报
- RestApi总结-(一)认识
- 基于node.js用grunt搭建web前端开发环境
- C#网络编程之HTTP工具类
- 带混淆的Eclipse项目导入Android Studio时报错Error:(16, 0) User supplied default proguard base extension name is