2017-07-27 49 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