Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给定不同值的MySQL和_Mysql_Database_Sum - Fatal编程技术网

给定不同值的MySQL和

给定不同值的MySQL和,mysql,database,sum,Mysql,Database,Sum,我有一张有付款清单的桌子。当我尝试检索总计时,根据我在SUM()中使用的列,我会得到不同的值 我的问题是: SELECT sum(Email_Broadcasting+Custom_Email_Newsletter+Digital_Newsletter+Mortgage_Matters) as EM, sum(Resident_Lists+Consumer_Lists+Business_Lists+Email_Lists+Specialty_Lists) as DL, sum(Database

我有一张有付款清单的桌子。当我尝试检索总计时,根据我在SUM()中使用的列,我会得到不同的值

我的问题是:

SELECT 
sum(Email_Broadcasting+Custom_Email_Newsletter+Digital_Newsletter+Mortgage_Matters) as EM,
sum(Resident_Lists+Consumer_Lists+Business_Lists+Email_Lists+Specialty_Lists) as DL,
sum(Database_Services+Email_Appending+Email_Cleansing) as DS,
sum(Email_Broadcasting+Custom_Email_Newsletter+Digital_Newsletter+Mortgage_Matters
+Resident_Lists+Consumer_Lists+Business_Lists+Email_Lists+Specialty_Lists
+Database_Services+Email_Appending+Email_Cleansing) as Total
FROM payment_orders
正如您所看到的,Total应该等于EM+DL+DS,但这是我得到的值:

EM           DL         DS  Total
66122.79    772030.36   55403.67    328701.27
这并不是真的加起来


我做错什么了吗?

您有一个空值。sum()不是空安全的。

最可能的解释是空值。其中某些列中的某些值可能为空

e、 g

4 + 5 + 0     =>  9 

4 + 5 + NULL =>  NULL
如果您想处理像0这样的空值,那么将每个列引用包装在一个函数中,该函数测试空值,如果值为空,则返回零

MySQL
IFNULL()
函数是实现此目的的一种方法:

IFNULL(4,0) + IFNULL(5,0) + IFNULL(NULL,0) =>  9
e、 g


(我没有验证每个小计中的所有列是否都包含在总数中……这显然是一个问题的根源,但我假设您已经检查过了。)

请显示您的数据结构和示例数据以及预期的输出。MySQL
SUM()
聚合函数是“空安全的”,在这种情况下,将忽略空值,返回的是非空值的总和。加法操作
(a+b+c)
不是“空安全的”。
SELECT SUM(IFNULL( Email_Broadcasting      ,0)
          +IFNULL( Custom_Email_Newsletter ,0)
          +IFNULL( Digital_Newsletter      ,0)
          +IFNULL( Mortgage_Matters        ,0) 
          ) as EM,