遇到的问题----sql语句中用sum()函数输出为null
2013-12-03 17:38
447 查看
在SQL语句中使用集合函数count(),返回结果肯定为非负整数,这也是用来判断数据有无的一个很有效的方法;
然后在用sum()进行集合相加的时候,如果sum()的对象没有记录,那么不会返回0,而返回null,这么做,不会影响数据库,因为数值型字段也是可以存放NULL的,因为在执行这样的SQL语句的时候,没有记录也不会报错。
但是执行完之后,要使用这个数据就有问题了。
1、在程序里处理的时候,比如进行四则运算或其他的强类型转换的时候,就会提供类型不正确或是与其它数据相加得到的结果变成NULL,因为NULL+number= Null。
2、统计的结果的SQL语句中有其它的运算,同1的最后一种情况,Null+ number = Null。就会把其它的有效数据也抹杀掉了。
解决方法:
1、使用isnull()方法进行判断,如isnull(sum(cnt),0),其中0为默认值,如果sum(cnt)的结果为null,则赋值 0;同理此方法可用于某字段,isnull(cnt,0),这样就可以排除一些值为null的数值型字段了。而如果这样 isnull(sum(isnull(cnt,0)),0),这样就可保万无一失了。
2、使用case when else流程控制语句,如可以用"case when sum(cnt) is null then 0 else sum(cnt) end"来代替sum(cnt),其中0同上一条的意义相同。
另外求平均函数avg() 也是一样的情况,相同的解决办法
用isnull函数解决:isnull(sum(刷卡金额),0)
然后在用sum()进行集合相加的时候,如果sum()的对象没有记录,那么不会返回0,而返回null,这么做,不会影响数据库,因为数值型字段也是可以存放NULL的,因为在执行这样的SQL语句的时候,没有记录也不会报错。
但是执行完之后,要使用这个数据就有问题了。
1、在程序里处理的时候,比如进行四则运算或其他的强类型转换的时候,就会提供类型不正确或是与其它数据相加得到的结果变成NULL,因为NULL+number= Null。
2、统计的结果的SQL语句中有其它的运算,同1的最后一种情况,Null+ number = Null。就会把其它的有效数据也抹杀掉了。
解决方法:
1、使用isnull()方法进行判断,如isnull(sum(cnt),0),其中0为默认值,如果sum(cnt)的结果为null,则赋值 0;同理此方法可用于某字段,isnull(cnt,0),这样就可以排除一些值为null的数值型字段了。而如果这样 isnull(sum(isnull(cnt,0)),0),这样就可保万无一失了。
2、使用case when else流程控制语句,如可以用"case when sum(cnt) is null then 0 else sum(cnt) end"来代替sum(cnt),其中0同上一条的意义相同。
另外求平均函数avg() 也是一样的情况,相同的解决办法
用isnull函数解决:isnull(sum(刷卡金额),0)
相关文章推荐
- 遇到的问题----sql语句中用sum()函数输出为null
- SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL。但咱们想返回的是0而不是Null
- SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL。但咱们想返回的是0而不是Null
- php使用odbc执行复杂函数遇到的问题,sql语句直接在sqlserver数据库中运行有结果,使用php总是为空
- 问题:PLS-00204: 函数或伪列 'EXISTS' 只能在 SQL 语句中使用;结果:PL/SQL中不能用exists函数?
- 关于Hibernate在使用原生SQL语句多表查询所遇到的问题
- sql语句真强大,他有好多函数,如group by 、sum、case when、decode、sum if 、from后面跟数据集等
- 面试中遇到的sql语句行列转换问题
- 关于用SQL语句Sql2008数据库的备份与还原常遇到的问题
- Hibernate在SQL语句中遇到的三个问题
- 在ORM框架中使用原生sql语句进行聚合查询遇到的问题
- sql比较字符的,Mybatis中遇到的符号转化,sql比较语句问题!
- sql语句 自己编写一个函数reversion,完成颠倒一个字符串,即:select dbo.reversion('abcd') 输出的结果为 dcba
- oracle的SQL语句中同一函数执行的时间问题
- JAVA中数据库操作中sql语句遇到的问题
- 关于SQL中 动态执行SQL语句并且获得动态SQL语句输出参数值的问题
- SQL高级语句-NULL 函数-- ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
- Sql Server每日一练-SQL Server 7.0 函数及SQL语句相关问题
- mysql语句sum求和为null的问题
- 关于执行Oracle下Sql语句中遇到的特殊字符问题解决办法。