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

MySQL技术咨询:如何筛选仅提交一次申请的申请人姓名

解决MySQL筛选仅提交一次申请的申请人姓名问题

嗨,刚接触MySQL遇到这类分组查询的问题很正常,我来帮你排查下问题所在~

你的SQL语句问题在于子查询里只统计了申请次数,没有关联申请人姓名,外层查询根本拿不到name字段的数据,自然无法返回正确结果。而且按照MySQL默认的ONLY_FULL_GROUP_BY模式,分组查询中SELECT的非聚合字段必须出现在GROUP BY子句里,否则会报错。

修正后的SQL写法

这里提供两种简洁的正确写法,你可以根据实际表结构选择:

写法一:使用子查询(和你的思路更贴近)

SELECT name
FROM (
    SELECT name, anumber, COUNT(anumber) AS apply_count
    FROM APPLIES
    GROUP BY anumber, name  -- 必须将name加入分组,符合MySQL的分组规则
    HAVING apply_count = 1
) AS temp;

写法二:直接分组筛选(更简洁)

SELECT name
FROM APPLIES
GROUP BY anumber, name
HAVING COUNT(anumber) = 1;

关键说明

  • 为什么要同时GROUP BY anumber, name?
    假设anumber是申请人的唯一标识(每个申请人对应唯一编号),那么每个anumber对应唯一的name。加上name分组是为了符合MySQL的ONLY_FULL_GROUP_BY约束——SELECT中的非聚合列必须出现在GROUP BY中,避免出现分组后返回不确定的name值。
  • 如果你的表中anumber和name是严格一一对应的,也可以只按anumber分组,但SELECT时要确保name是该分组的唯一值,不过加上name分组会更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:46:51