2013-02-01 25 views
3

這是當前查詢:如何在使用select,group by和count時獲得非空結果集?

SELECT status.ct_reconcile_status, 
     IFNULL(COUNT(status.ct_reconcile_status), 0) AS sch_change_status_num 
FROM db_crewops_cm_action status 
WHERE status.ct_reconcile_status IN ('SUCCESS', 'FAILED') 
     AND status.updated_ts > UTC_TIMESTAMP() - INTERVAL 60 minute 
GROUP BY status.ct_reconcile_status; 

而結果我想看起來像這樣:

SUCCESS 5 
FAILED 9 

這是很正常的。問題是,我可以得到一個情況下的結果數爲0,二者的狀態,並在這種情況下,我想這一點:

SUCCESS 0 
FAILED 0 

,而不是設置一個空的結果(我現在得到)。我有一個大概的想法,我應該自己加入表或使用WITH子句,但我不知道如何開始。

回答

3

嘗試類似:

SELECT a.status AS ct_reconcile_status, 
     (IFNULL(b.sch_change_status_num,0) + a.num) AS sch_change_status_num 
FROM 
    (SELECT 'SUCCESS' AS status, 0 AS num 
    UNION 
    SELECT 'FAILED', 0) a 
LEFT JOIN 
    (SELECT status.ct_reconcile_status, 
      COUNT(status.ct_reconcile_status) AS sch_change_status_num 
    FROM db_crewops_cm_action status 
    WHERE status.ct_reconcile_status IN ('SUCCESS', 'FAILED') 
      AND status.updated_ts > UTC_TIMESTAMP() - INTERVAL 60 minute 
    GROUP BY status.ct_reconcile_status) b 
ON a.status = b.ct_reconcile_status 

您可以刪除status.ct_reconcile_status IN ('SUCCESS', 'FAILED') AND,但是這可能會比較慢。