【问题标题】:How can I add empty values in group by?如何在 group by 中添加空值?
【发布时间】:2017-07-27 16:56:57
【问题描述】:

如何在分组依据中添加空值?

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

但是当值没有结果时,它们不在选择中,我想在所有这些 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

我希望当组中没有值时计数 id 显示为 0

【问题讨论】:

标签: mysql sql


【解决方案1】:

DataNascimento 的组将不起作用。您必须按 CASE 分组,并且还可以在其中包含 else 案例。

查看答案 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 .....

【讨论】:

  • 例如:如果这个 WHEN TIMESTAMPDIFF(YEAR, STR_TO_DATE(DataNascimento, '%d/%m/%Y'),CURDATE())
  • 您可以使用 UNION 将未找到的 0 值添加到结果集中。看起来很难看,但应该可以:查看答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2015-11-18
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多