如何在分组中添加空值?
我有一个按年龄组织的查询:
但是当值没有结果时它们不在select中,我想在所有这些CASE选项上添加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
我希望当组中没有值时,count id显示为0
答案 0 :(得分:0)
DataNascimento的小组无法使用。您必须按CASE分组,并且您也可以包含其他案例。
查看答案 Can you GROUP BY with a CASE WHEN THEN alias name?
为未找到的值添加count(0),union的用法可以起作用:
添加到更正后的陈述的末尾(使用案例):
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 .....