`

关于SQL语句中SUM函数返回NULL的解决办法

阅读更多

  在SQL语句中使用集合函数count(),返回结果肯定为非负整数,这也是用来判断数据有无的一个很有效的方法;

  然后在用sum()进行集合相加的时候,如果sum()的对象没有记录,那么不会返回0,而返回null,这么做,不会影响数据库,因为数值型字段也是可以存放NULL的,因为在执行这样的SQL语句的时候,没有记录也不会报错。

  但是执行完之后,要使用这个数据就有问题了。

  1.在程序里处理的时候,比如进行四则运算或其他的强类型转换的时候,就会提供类型不正确或是与其它数据相加得到的结果变成NULL,因为NULL+number= Null。

  2.统计的结果的SQL语句中有其它的运算,同1的最后一种情况,Null+ number = Null。就会把其它的有效数据也抹杀掉了。

  当然,求平均函数avg() 也是一样的情况,相同的解决办法。

解决方法:

  1.使用case when else流程控制语句,如可以用"case when sum(cnt) is null then 0 else sum(cnt) end"来代替sum(cnt),其中0同上一条的意义相同。

  2.COALESCE函数进行判断,如COALESCE(SUM(name),0),COALESCE函数的意思是返回参数列表中第一个为空的值,该方法允许传入多个参数,该函数也是SQL中的标准函数。 如下所示:

SELECT COALESCE(SUM(name),0) FROM person WHERE id > 0 

  3.使用isnull()方法进行判断,如isnull(sum(cnt),0),其中0为默认值,如果sum(cnt)的结果为null,则赋值 0;同理此方法可用于某字段,isnull(cnt,0),这样就可以排除一些值为null的数值型字段了。而如果这样 isnull(sum(isnull(cnt,0)),0),这样就可保万无一失了。

  当然,不同的数据库判断为空的函数不一样,具体如下:

SQL Server / MS Access  

SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))  FROM Products  

Oracle 

  Oracle does not have an ISNULL() function. However, we can use the NVL() function to achieve the same result:  

SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))  FROM Products

MySQL  

  MySQL does have an ISNULL() function. However, it works a little bit different from Microsoft's ISNULL() function.  

In MySQL we can use the IFNULL() function, like this:  

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))  FROM Products  

or we can use the COALESCE() function, like this:  

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))  FROM Products

 

文章来源:https://blog.csdn.net/zengcong2013/article/details/46120835

分享到:
评论

相关推荐

    PB脚本中SQL语句写法与SQL中语句写法对照

    PB脚本中SQL语句写法与SQL中语句写法对照 PB脚本中SQL语句写法与SQL中语句写法对照是非常重要的知识点,因为PB脚本和SQL语言在写法和应用中有所不同。本文将对PB脚本中SQL语句写法和SQL中语句写法进行对比和分析。 ...

    经典SQL语句函数大全

    本资源“经典SQL语句函数大全”聚焦于SQL中的各种函数,旨在帮助用户掌握SQL的核心功能并提升数据库操作效率。** **一、SQL基本概念** SQL分为DDL(Data Definition Language)和DML(Data Manipulation Language)...

    dw中SUM函数的使用.zip_SUM_dw_sum dw_sum函数

    在DW中,SQL查询语言是进行数据操作的主要手段,而SUM函数则是SQL中的一个核心聚合函数,用于计算一组数值的总和。本篇文章将深入探讨在DW中如何有效地使用SUM函数。 SUM函数的基本语法如下: ```sql SELECT SUM...

    常用SQL语句大全(简单实用)

    根据提供的文件信息,本文将对其中提及的SQL知识点进行详细解释与说明,旨在为不同层次的学习者提供一个全面且易于理解的SQL语句指南。 ### 1. SELECT 语句 `SELECT` 语句是SQL中最常用的命令之一,主要用于从...

    Sql Server 的语句函数大全

    在SQL Server数据库管理系统中,函数是执行特定计算或操作的核心元素。它们极大地丰富了SQL语言,使得查询和处理数据变得更加灵活高效。以下是对"Sql Server的语句函数大全"的详细解析: 1. **数值函数**: - `ABS...

    易语言常用SQL语句

    ### 易语言中的SQL语句应用详解 #### 一、复制表结构 **知识点:** 在数据库管理中,经常需要创建具有相同结构的新表。在易语言中可以通过SQL语句来实现这一操作。 **示例代码:** ```sql SELECT * INTO b FROM a ...

    SQL复习之聚集函数

    在SQL语言中,聚集函数是用于处理一组值并返回单个值的函数。它们在数据分析和数据查询中扮演着至关重要的角色,可以帮助我们快速获取数据集的统计信息。本篇文章将深入探讨SQL中的聚集函数,以及如何利用它们来增强...

    sql语句学习入门

    SQL语句学习入门涉及的知识点涵盖了结构化查询语言(SQL)的多个方面,包括基础语法、各类操作符、数据操作语言(DML)和数据定义语言(DDL)等。下面详细解读这些知识点。 1. SQL简介 SQL(Structured Query ...

    经典SQL语句大全(各种sql语句)

    SQL,全称Structured Query Language,是一种用于...这些是SQL的一些基本和高级用法,实际应用中,SQL语句会更复杂,可能涉及到子查询、联接、窗口函数、聚合函数等,理解和熟练掌握SQL是数据库管理和数据分析的基础。

    SQL语句练习提高

    【SQL语句练习提高】 在SQL中,查询和操作数据是其核心功能。以下通过给出的练习题目,我们将深入理解SQL的基本句式和用法。 28. 题目要求从`employee`表中抽取部门名称(depart_name),计算平均工资(avg(wage)...

    SQL语句之基础语法汇总

    "SQL语句之基础语法汇总" SQL语句之基础语法汇总是一篇详细的SQL语句基础知识总结,包括创建表、修改表、删除表、添加数据、更新数据、删除数据等基础语法。下面是对该篇文章的知识点总结: 一、创建表、修改表、...

    经典sql语句,sql语句集

    在这个“经典sql语句”集合中,我们可以期待看到一系列实用且高效的SQL命令,涵盖了数据库的基础操作到高级功能。下面将详细介绍一些常见的SQL知识点。 1. **基本查询操作**: - `SELECT`:用于从表中选取数据,是...

    sql数据库 转 Access SQL语句改写之 Case When Then When Then Else End

    子查询可以嵌套在其他SQL语句中,如SELECT、INSERT、UPDATE或DELETE语句中。子查询可以用来过滤结果集,也可以用来返回单个值或多个值。 **SQL子查询示例:** ```sql SELECT column_name FROM table1 WHERE column...

    sql server 中sql语句大总结

    在SQL Server中,SQL语句是用于管理和操作数据库的核心工具,涵盖了数据定义、数据操纵和数据控制等各个方面。以下是对这些语句的详细说明: 1. **DDL (数据定义语言)**: - `CREATE`:用于创建数据库对象,如...

    SQL语句练习题及答案

    ### SQL语句强化练习知识点详解 #### 一、简单查询 **知识点1:查询所有记录** - **描述**: 使用 `SELECT * FROM 表名` 可以查询表中的所有记录。 - **示例**: 查询所有学生的信息。 - **SQL语句**: `SELECT * ...

    第八章用SQL语句操作数据.zip

    即使右表没有匹配)、RIGHT JOIN(返回右表的所有行,即使左表没有匹配)和FULL OUTER JOIN(返回两表的所有行,如果某表中没有匹配,则结果为NULL)。 6. **子查询** 子查询是在一个查询语句内部嵌套另一个查询,...

    SQL语句总结

    本文将深入探讨“SQL语句总结”这一主题,特别关注MySQL数据库的常用操作。 首先,我们从基础的数据库操作开始,即CRUD(Create、Read、Update、Delete),它们构成了所有数据库操作的核心。 1. **创建(Create)*...

    经典Excel_VBA_SQL语句

    - SQL语句中包含了两个子查询:一个用于从“入库”表中获取数据,另一个从“回款”表中获取数据。 - 子查询的结果通过LEFT JOIN合并在一起,确保所有存货类都能出现在最终结果中。 - 条件筛选包括了区域名称、...

Global site tag (gtag.js) - Google Analytics