给定不同值的MySQL和
我有一张有付款清单的桌子。当我尝试检索总计时,根据我在SUM()中使用的列,我会得到不同的值 我的问题是:给定不同值的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
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这样的空值,那么将每个列引用包装在一个函数中,该函数测试空值,如果值为空,则返回零
MySQLIFNULL()
函数是实现此目的的一种方法:
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,