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

SQL面试题:查询同时拥有男女两种性别孩子的家长姓名

SQL面试题:查询同时拥有男性、女性孩子的家长姓名

题目说明

给定一张记录家长与子女性别信息的表,仅包含两个字段:

  • Parent Name:家长姓名
  • Child Gender:孩子性别,常规取值为M(男性)、F(女性)

给定样例数据对应关系:

  • 家长Alyssa的孩子性别包含F、M两类
  • 家长Ben的孩子性别仅为F
  • 家长Cathy的孩子性别均为M

需求为查询至少拥有1名男性孩子、1名女性孩子的家长姓名,上述样例的正确输出结果为Alyssa。


解题思路

核心判断逻辑非常明确:符合要求的家长,必须同时关联过男性、女性两类孩子的记录,因此按家长姓名分组做聚合统计是最高效的实现方式,不需要写冗余的自连接或多层嵌套子查询。
根据业务场景的不同,可以选两种常用实现写法:


参考SQL实现

写法1:通用去重计数写法(全SQL方言兼容)

直接统计每个家长名下孩子性别的去重数量,去重值等于2即说明同时覆盖两类性别,满足筛选要求:

SELECT 
    `Parent Name`
FROM 
    parent_child_info -- 替换为实际业务中的表名即可
GROUP BY 
    `Parent Name`
HAVING 
    COUNT(DISTINCT `Child Gender`) = 2;

这个写法的优势是不需要硬编码性别枚举值,通用性更强,哪怕后续性别字段新增其他枚举值,只要家长名下存在两类不同性别的孩子就会被正确命中。

写法2:条件聚合写法(精准匹配M/F两类性别)

如果业务要求必须严格同时存在M、F两种性别,需要排除其他性别值的干扰,可以用条件聚合做精准校验:

SELECT 
    `Parent Name`
FROM 
    parent_child_info -- 替换为实际业务中的表名即可
GROUP BY 
    `Parent Name`
HAVING 
    -- 至少1个男孩
    SUM(CASE WHEN `Child Gender` = 'M' THEN 1 ELSE 0 END) >= 1
    -- 至少1个女孩
    AND SUM(CASE WHEN `Child Gender` = 'F' THEN 1 ELSE 0 END) >= 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:06:34