SQL查询疑问:为何无法获取ad_id对应prof_name唯一值>4的所有记录?
原SQL的错误分析
- 分组逻辑完全偏离需求:原SQL按
ad_id和prof_name联合分组,COUNT(prof_name)统计的是同一ad_id下同一个prof_name重复出现的次数,而你需要的是统计每个ad_id下prof_name的唯一值数量,两者逻辑完全不同。 - 返回结果不符合预期:原SQL只能输出分组后的
ad_id和prof_name,无法返回所有原始数据,而且筛选条件也不是你要的“ad_id对应prof_name唯一值>4”。
正确写法示例
方式一:子查询筛选合格ad_id后关联原表
先找出所有满足条件的ad_id,再匹配原表返回全部对应记录:
SELECT p.* FROM PROF p JOIN ( SELECT ad_id FROM PROF GROUP BY ad_id HAVING COUNT(DISTINCT prof_name) > 4 ) valid_ad ON p.ad_id = valid_ad.ad_id
方式二:窗口函数直接计算并筛选
用窗口函数给每条记录标记其ad_id对应的prof_name唯一值数量,再过滤符合条件的记录:
SELECT * FROM ( SELECT *, COUNT(DISTINCT prof_name) OVER (PARTITION BY ad_id) AS unique_prof_count FROM PROF ) temp WHERE unique_prof_count > 4
内容的提问来源于stack exchange,提问作者UsuallyConfused
相关产品推荐
相关产品推荐

