MySQL总和给出不同的值

时间:2013-07-11 03:36:41

标签: 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_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

并没有真正加起来。

我做错了吗?

2 个答案:

答案 0 :(得分:2)

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

e.g。

4 + 5 + 0     =>  9 

4 + 5 + NULL =>  NULL

如果要处理像0这样的NULL值,则在测试NULL的函数中包装每个列引用,如果值为NULL则返回零。

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

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

e.g。

SELECT SUM(IFNULL( Email_Broadcasting      ,0)
          +IFNULL( Custom_Email_Newsletter ,0)
          +IFNULL( Digital_Newsletter      ,0)
          +IFNULL( Mortgage_Matters        ,0) 
          ) as EM,

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

答案 1 :(得分:-1)

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