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

关于GROUP BY后外层查询是否需DISTINCT的SQL技术咨询

问题解答

你的理解完全正确,外层查询里不需要使用DISTINCT。

原因分析

CTE search_agg 中通过 GROUP BY user_id 进行分组,这已经确保了结果集中的 user_id 是唯一的——每个用户ID只会在结果里出现一次。因此外层查询直接统计行数就能得到符合条件的唯一用户数量,COUNT(user_id) 或者更简洁的 COUNT(*) 和 COUNT(DISTINCT user_id) 得到的结果完全一致。

关于保留DISTINCT的情况

保留 DISTINCT 不会导致结果错误,但属于冗余操作:数据库会额外执行一次去重逻辑,哪怕当前结果集里根本没有重复的 user_id,这会无端增加不必要的计算开销,尤其是当 search_agg 的结果集较大时,可能影响查询效率。

优化后的查询语句

可以把外层查询改成更高效的写法:

WITH search_agg as(
SELECT user_id, count(search_id) as count_search
FROM search
WHERE date>current_date -interval '7 days'
GROUP BY user_id
HAVING count_search>10)

SELECT COUNT(*)
FROM search_agg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:57:22