我有一张包含付款清单的表格。当我尝试检索总数时,我会得到不同的值,具体取决于我在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
并没有真正加起来。
我做错了吗?
答案 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()不是空的安全。