SQL查询求助:获取存在未完成问卷的去重用户列表
解决未完成问卷用户去重查询问题
嘿,这个问题我熟!你现在的SQL语句会返回重复的用户记录,毕竟同一个用户可能发起多份未完成的问卷。要实现“只要有至少一份未完成问卷就只显示一次用户”的需求,我给你几个实用的方案:
方案1:用DISTINCT快速去重
这是最直观的方法,直接在SELECT后加上DISTINCT关键字,它会自动帮你剔除所有完全重复的行,确保每个用户只出现一次:
SELECT DISTINCT Survey.UserID, Survey.Fullname FROM Survey -- 替换成你实际的表名或关联逻辑 WHERE Survey.SurveySubmitted = 0; -- 0代表未提交
注意:如果你的Fullname和UserID是一一对应的(正常情况都是这样),这个方法完全够用。
方案2:用GROUP BY分组去重
如果想更灵活地控制用户信息的展示(比如同一个UserID对应不同Fullname的极端情况),可以用GROUP BY按UserID分组,再通过聚合函数取唯一的用户名称:
SELECT Survey.UserID, MAX(Survey.Fullname) AS Fullname FROM Survey WHERE Survey.SurveySubmitted = 0 GROUP BY Survey.UserID;
这里用MAX()只是取任意一个有效的Fullname,换成MIN()效果一样,只要能保证每个UserID对应唯一的名称即可。
方案3:用EXISTS子查询(大数据量更高效)
如果你的问卷表数据量很大,EXISTS子查询的性能会更优——它只要找到用户存在至少一份未完成问卷的记录,就立刻返回该用户,不需要处理重复行:
-- 假设用户信息存在单独的Users表,问卷表是Surveys SELECT Users.UserID, Users.Fullname FROM Users WHERE EXISTS ( SELECT 1 FROM Surveys WHERE Surveys.UserID = Users.UserID AND Surveys.SurveySubmitted = 0 );
如果你的用户和问卷数据在同一张表,也可以调整成单表的EXISTS查询,逻辑是一样的。
内容的提问来源于stack exchange,提问作者Jean
相关产品推荐
相关产品推荐

