You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL按条件聚合行值:将≥5的年龄合并为‘5+’统计人口

问题描述

现有如下SQL查询语句:

SELECT Year, geo_code, Age, COUNT(*) AS Population 
FROM table_1
WHERE geo_code = 'AB23' 
  AND Year = 2023
GROUP BY Year, geo_code, Age

执行后得到的结果如下:

Yeargeo_codeAgePopulation
2023AB23110
2023AB23212
2023AB23311
2023AB23514
2023AB23610
2023AB2375

现在需要将年龄≥5的人口统计聚合为5+分组,期望输出结果如下:

Yeargeo_codeAgePopulation
2023AB23110
2023AB23212
2023AB23311
2023AB235+29

请问如何修改SQL代码实现该需求?


解决方案

可以通过CASE语句对年龄进行分组转换,再基于转换后的分组做聚合统计,修改后的SQL如下:

SELECT 
    Year, 
    geo_code, 
    CASE 
        WHEN Age >= 5 THEN '5+'
        ELSE CAST(Age AS VARCHAR)
    END AS Age,
    COUNT(*) AS Population 
FROM table_1
WHERE geo_code = 'AB23' 
  AND Year = 2023
GROUP BY Year, geo_code, CASE 
        WHEN Age >= 5 THEN '5+'
        ELSE CAST(Age AS VARCHAR)
    END

逻辑说明

  1. 分组标记:用CASE判断每条记录的年龄,≥5的统一标记为5+,其余保留原年龄值(转换为字符串是为了保证分组字段类型一致,避免分组异常)。
  2. 匹配分组规则:GROUP BY子句必须和SELECT里的分组规则完全一致,这样才能让相同分组的记录被正确聚合。
  3. 统计聚合:COUNT(*)会统计每个分组内的总记录数,最终得到合并后的结果。

如果你的数据库支持GROUP BY直接引用SELECT中的别名(比如MySQL 8.0+、PostgreSQL等),可以简化GROUP BY部分:

SELECT 
    Year, 
    geo_code, 
    CASE 
        WHEN Age >= 5 THEN '5+'
        ELSE CAST(Age AS VARCHAR)
    END AS Age,
    COUNT(*) AS Population 
FROM table_1
WHERE geo_code = 'AB23' 
  AND Year = 2023
GROUP BY Year, geo_code, Age

内容的提问来源于stack exchange,提问作者zhd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:25:19