mysql case when 空_MySQL CASE那么空案例值

SELECT CASE WHEN age IS NULL THEN 'Unspecified'

WHEN age < 18 THEN '<18'

WHEN age >= 18 AND age <= 24 THEN '18-24'

WHEN age >= 25 AND age <= 30 THEN '25-30'

WHEN age >= 31 AND age <= 40 THEN '31-40'

WHEN age > 40 THEN '>40'

END AS ageband,COUNT(*)

FROM (SELECT age

FROM table) t

GROUP BY ageband

这是我的查询.这些是结果:

但是,如果table.age在一个类别中没有至少1个年龄,那么它将在结果中忽略该情况.像这样:

该数据集没有任何年龄的记录

最佳答案

您需要一个agebands表来填充没有匹配行的条目的结果.这可以通过实际表来完成,或者使用如下子查询动态生成:

SELECT a.ageband,IFNULL(t.agecount,0)

FROM (

-- ORIGINAL QUERY

SELECT

CASE

WHEN age IS NULL THEN 'Unspecified'

WHEN age < 18 THEN '<18'

WHEN age >= 18 AND age <= 24 THEN '18-24'

WHEN age >= 25 AND age <= 30 THEN '25-30'

WHEN age >= 31 AND age <= 40 THEN '31-40'

WHEN age > 40 THEN '>40'

END AS ageband,COUNT(*) as agecount

FROM (SELECT age FROM Table1) t

GROUP BY ageband

) t

right join (

-- TABLE OF POSSIBLE AGEBANDS

SELECT 'Unspecified' as ageband union

SELECT '<18' union

SELECT '18-24' union

SELECT '25-30' union

SELECT '31-40' union

SELECT '>40'

) a on t.ageband = a.ageband

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值