0

支払いのリストを含むテーブルがあります。合計を取得しようとすると、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

これは実際には合計されません。

私は何か間違ったことをしていますか?

4

2 に答える 2

2

最も可能性の高い説明は NULL 値です。これらの列の一部の値は、おそらく NULL です。

例えば

4 + 5 + 0     =>  9 

4 + 5 + NULL =>  NULL

NULL 値を 0 のように処理する場合は、NULL をテストして値が NULL の場合はゼロを返す関数ですべての列参照をラップします。

MySQLIFNULL()関数は、これを行う 1 つの方法です。

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

例えば

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

(各小計のすべての列が合計に含まれていることを確認していません...これは明らかに問題の原因となりますが、すでに確認していると思います。)

于 2013-07-11T04:49:09.040 に答える
-1

null 値があります。sum() はヌルセーフではありません。

于 2013-07-11T04:39:07.600 に答える