2014-09-25 104 views
1
SELECT NAMA_DUN, 
COUNT(case when ((RIGHT(noMyKid, 1))% 2) = 0 then 1 else 0 end) AS FEMALE, 
COUNT(case when ((RIGHT(noMyKid, 1))% 2) = 1 then 1 else 0 end) AS MALE, 
COUNT(DISTINCT(noMyKid)) as jumlah 
FROM mohon 
LEFT JOIN dun ON dun.KOD_DUN=mohon.dun_nama 
WHERE status_proses = 'diproses' 
AND concat('20', substr(noMyKid, 1, 2)) = '2008' 
AND status_mohon = 'Layak' 
AND status_semak = '1' 
AND (
status_bayar = '' 
OR status_bayar = 'Belum' 
OR status_bayar = 'Sudah') 
AND (
status_terima = '' 
OR status_terima = 'Terima' 
) GROUP BY dun_nama 
ORDER BY NAMA_DUN 

這是我的mysql代碼。爲什麼我的'COUNT CASE WHEN'爲女性和男性專欄提供相同的輸出。COUNT數據使用情況下與mysql

+4

使用sum()而不是count。 – 2014-09-25 08:42:46

回答

2

通常COUNT()用於計數行,因此經常以COUNT(*)的形式使用。當您使用字段(或其他任何內容)作爲COUNT()的參數時,它會爲每個沒有NULL的值計數1。

在你的情況下,你所有的值不是NULL(它們是1或0),因此你最終會得到相同的結果。

所以Abhik Chakraborty是正確的,使用SUM()和一切都應該罰款。

1

COUNT()功能不只是使用CASE表達式時,如您有在這裏,你可以明確地在需要的地方

SELECT NAMA_DUN, 
COUNT(case when ((RIGHT(noMyKid, 1))% 2) = 0 then 1 else NULL end) AS FEMALE, 
COUNT(case when ((RIGHT(noMyKid, 1))% 2) = 1 then 1 else NULL end) AS MALE, 
COUNT(DISTINCT(noMyKid)) as jumlah 

返回null或承認非空值,所以,隱含地忽略else條件返回NULL

SELECT NAMA_DUN, 
COUNT(case when ((RIGHT(noMyKid, 1))% 2) = 0 then 1 end) AS FEMALE, 
COUNT(case when ((RIGHT(noMyKid, 1))% 2) = 1 then 1 end) AS MALE, 
COUNT(DISTINCT(noMyKid)) as jumlah 

OR,通過使用SUM()模擬計數的效果提供你使用1和0(或1和NULL)

SELECT NAMA_DUN, 
SUM(case when ((RIGHT(noMyKid, 1))% 2) = 0 then 1 else 0 end) AS FEMALE, 
SUM(case when ((RIGHT(noMyKid, 1))% 2) = 1 then 1 else 0 end) AS MALE, 
COUNT(DISTINCT(noMyKid)) as jumlah