2013-11-27 35 views
0

我有以下查詢正常工作,但需要篩選其狀態設置爲「無效」或「已存檔」的記錄中的年齡。我的表名爲Contact,並具有狀態列和年齡列。其他狀態爲「活動」,「後續」和「已完成」。如何在GROUP BY CASE之後集成HAVING子句

SELECT CASE 
    WHEN age BETWEEN '0' AND '18' THEN '18 and Under' 
    WHEN age BETWEEN '19' AND '30' THEN '19 to 30' 
    WHEN age BETWEEN '31' AND '40' THEN '31 to 40' 
    WHEN age BETWEEN '41' AND '50' THEN '41 to 50' 
    WHEN age BETWEEN '51' AND '60' THEN '51 to 60'        
    ELSE '61 and Older' 
    END 
,Count(id) 
FROM Contact 
GROUP BY 
CASE 
    WHEN age BETWEEN '0' AND '18' THEN '18 and Under' 
    WHEN age BETWEEN '19' AND '30' THEN '19 to 30' 
    WHEN age BETWEEN '31' AND '40' THEN '31 to 40' 
    WHEN age BETWEEN '41' AND '50' THEN '41 to 50' 
    WHEN age BETWEEN '51' AND '60' THEN '51 to 60'        
    ELSE '61 and Older' 
END 

我想HAVING子句整合如下,但不知道在哪裏把它:

HAVING status NOT IN('Invalid', 'Archived') 

無論我嘗試給出了一個錯誤。任何幫助指出正確的方向將不勝感激。

+0

我認爲,這個錯誤可能來自無效'集團BY' –

+1

嘗試來'FROM聯繫WHERE狀態NOT IN( '無效', '歸檔')GROUP BY ...'。不知道這是否會工作。 – JunM

+1

使用'group by 1'(列號參考)。無需重複整個案例條款。 –

回答

1

試試這個sqlFiddle example

SELECT CASE 
     WHEN age BETWEEN '0' AND '18' THEN '18 and Under' 
     WHEN age BETWEEN '19' AND '30' THEN '19 to 30' 
     WHEN age BETWEEN '31' AND '40' THEN '31 to 40' 
     WHEN age BETWEEN '41' AND '50' THEN '41 to 50' 
     WHEN age BETWEEN '51' AND '60' THEN '51 to 60'        
     ELSE '61 and Older' 
     END as age_range, 
     status, 
     Count(id) as `count` 
FROM Contact 
WHERE status NOT IN ('Invalid','Archived') 
GROUP BY age_range,status; 

,或者如果你想使用的HAVING status NOT IN ('Invalid','Archived'),你可以用下面這是相同的最終結果前。 (sqlfiddle example

SELECT CASE 
     WHEN age BETWEEN '0' AND '18' THEN '18 and Under' 
     WHEN age BETWEEN '19' AND '30' THEN '19 to 30' 
     WHEN age BETWEEN '31' AND '40' THEN '31 to 40' 
     WHEN age BETWEEN '41' AND '50' THEN '41 to 50' 
     WHEN age BETWEEN '51' AND '60' THEN '51 to 60'        
     ELSE '61 and Older' 
     END as age_range, 
     status, 
     Count(id) as `count` 
FROM Contact 
GROUP BY age_range,status 
HAVING status NOT IN ('Invalid','Archived'); 
+0

謝謝Tin Tran。這非常有幫助。 – user1218172

+0

我可以看到你的例子在sqlfiddle中完美工作。我在Wavemaker的查詢編輯器中將其作爲Native SQL查詢運行,並且出現此錯誤「運行查詢錯誤:MySQLSyntaxErrorException:'group statement'中的未知列'age_range'。大多數查詢在Wavemaker中運行良好,但由於某些原因。 – user1218172