如何在group by中添加空值?

时间:2017-07-27 16:56:58

标签: mysql sql

如何在分组中添加空值?

我有一个按年龄组织的查询:

但是当值没有结果时它们不在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

1 个答案:

答案 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 .....
相关问题