2014-05-12 74 views
1

似乎無法得到此工作。如果計數爲空,我想將其設置爲零...否則將其設置爲計數。我在我的代碼的另一部分添加了多個計數,所以當我這樣做時,我不能有空值。如果計數值爲空將其設置爲零 - sql select語句

$表= 「 ...

LEFT JOIN 
    (SELECT user_id, IF(count(user_id) = '(null)',0,count(user_id)) as t1count 
    FROM screenshot_logs 
    GROUP BY user_id) as t_screenshots 
     on t_screenshots.user_id = users.user_id 
    ... 

」;

+3

爲什麼'COUNT(...)'會返回NULL?還記得'NULL'永遠不會「等於」任何東西,甚至不是它本身。這就是爲什麼有'不是空'作爲比較。 – tadman

+0

問題不在內聯視圖查詢中;問題是在LEFT JOIN操作返回的行中沒有找到't_screenshots'中的「匹配」行時,外部查詢中對't1count'的引用可以返回NULL。 – spencer7593

回答

3

在外部查詢,則可以使用IFNULL()功能替換爲零的NULL,例如

SELECT ... 
    , IFNULL(v.t1count,0) AS t1count 
    FROM ... 
    LEFT 
    JOIN (SELECT ... AS t1count 
       ... 
     ) v 
    ON ... 

你得到外部查詢返回的NULL是不是從內嵌視圖查詢。 NULL是LEFT [OUTER] JOIN操作找到的「不匹配」的結果。

如果引用的其他表達式v.t1count在外部查詢,你可以用NULLIF(v.t1count,0)替換那些引用爲好。

+0

where count()'? – Shafizadeh

+0

@Sajad:據推測,這個例子中的內聯視圖(派生表)別名爲'v'可能包含一個'COUNT()'聚合。我在回答中省略了一個COUNT()表達式,突出顯示了一個重點......它不是返回NULL值的COUNT()表達式。問題是外連接導致返回NULL。 – spencer7593

0

的總COUNT()總是會返回一個值。

參考:Does COUNT(*) always return a result?

+0

正在返回有效計數,但如果沒有,則爲空。例如,在這個例子中,如果有結果,它會返回25,但如果沒有,我會得到null,這就是爲什麼我想在這種情況下將其設置爲0的原因。 – user756659

相關問題