You need to enable JavaScript to run this app. 能否编写单表SQL SELECT语句 按条件返回两列统计各年龄不同性别人数
优惠活动
大模型
产品
解决方案
定价
更多

能否编写单表SQL SELECT语句 按条件返回两列统计各年龄不同性别人数

实现方案

这个需求属于典型的行转列统计场景,用条件聚合配合年龄序列补全即可实现,完整SQL如下(兼容绝大多数SQL dialect):

SELECT
  COUNT(CASE WHEN gender = 'male' THEN 1 END) AS male,
  COUNT(CASE WHEN gender = 'female' THEN 1 END) AS female
FROM (
  -- 生成18/19/20三个年龄的完整序列,保证无数据的18岁分组也能输出
  SELECT 18 AS age UNION ALL
  SELECT 19 AS age UNION ALL
  SELECT 20 AS age
) AS age_groups
LEFT JOIN person ON age_groups.age = person.`age (18-20)`
GROUP BY age_groups.age
ORDER BY age_groups.age

逻辑说明

  • 内层通过UNION ALL生成固定的18、19、20三个年龄的临时表,避免因为原表没有18岁数据导致这一行缺失
  • 用左关联把原person表中对应年龄的记录关联到对应年龄分组上
  • 分组后通过CASE WHEN判断性别,匹配对应性别时返回有效值,不匹配时返回NULL,COUNT会自动忽略NULL值,最终得到各年龄分组下的男女计数

如果不需要保留无数据的18岁分组,也可以直接对原表分组统计:

SELECT
  COUNT(CASE WHEN gender = 'male' THEN 1 END) AS male,
  COUNT(CASE WHEN gender = 'female' THEN 1 END) AS female
FROM person
GROUP BY `age (18-20)`

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:06:08