2017-07-27 98 views
0

如何在組中添加空值?如何在組中添加空值?

我有一個由年齡組織查詢:

但是當值沒有結果,他們是不是在選擇,我想在所有這些案例選擇加0。

我供參考選擇:

SELECT CASE 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) < 4 THEN 'Menos de 4' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 5 AND 9 THEN '5 a 9 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 10 AND 17 THEN '10 a 17 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 18 AND 24 THEN '18 a 24 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 25 AND 29 THEN '25 a 29 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 30 AND 39 THEN '30 a 39 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 40 AND 49 THEN '40 a 49 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 50 AND 59 THEN '50 a 59 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) BETWEEN 60 AND 69 THEN '60 a 69 Anos' 
     WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE()) >= 70 THEN 'Maior que 70 Anos' 
     ELSE 'SEM INFORMAÇÕES' END , 
     COUNT(id) 
     FROM pessoas GROUP BY DataNascimento 

我想,當有組中沒有價值的計數ID顯示爲0

+0

也許'當年IS NULL或DataNascimento IS NULL THEN'NULL Anos''。 – krokodilko

+0

給CASE語句一個別名和GROUP BY別名。 –

+0

請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢 – Strawberry

回答

0

通過DataNascimento組將無法正常工作。您必須按CASE分組,並且您可以包含其他情況。

見答案 Can you GROUP BY with a CASE WHEN THEN alias name?

添加數(0)爲未找到值工會的使用可以工作:

添加到您的更正聲明,(使用時)結束:

union select 'menos de 4', 0 from pessoas where 
    DataNascimento not exists in 
     (select DataNascimento from pessoas where 
     TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m 
     /%Y'),CURDATE()) < 4) 

union select '5 a 9 Anos', 0 from pessoas where 
    DataNascimento not exists in 
     (select DataNascimento from pessoas where 
    TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m 
    /%Y'),CURDATE()) BETWEEN 5 AND 9) 

union ..... 
+0

但我如何可以添加0組未顯示? –

+0

例如:如果此時TIMESTAMPDIFF(年,STR_TO_DATE(DataNascimento,'%d /%m /%Y'),CURDATE())<4那麼'Menos de 4'沒有任何人我想顯示0在id計數 –

+0

您可以使用UNION將未找到的0值添加到結果集中。看起來很醜,但應該工作:看到答案。 – aschoerk