SQL报错解决:使用HAVING查询Netflix有至少100部剧集的国家
问题报错原因
报错的核心是HAVING子句仅支持过滤分组后的聚合结果,TYPE字段既没有出现在GROUP BY的分组字段中,也没有被聚合函数包裹,SQL引擎无法识别分组后该字段的取值,因此触发编译错误。
正确改写方案
两种写法均符合「必须使用HAVING子句」的要求:
- 推荐高性能写法(先过滤非剧集记录再分组,计算效率更高)
SELECT SPLIT_PART(COUNTRY,',',1) AS country, COUNT(*) AS tv_show_count FROM NETFLIX_TITLES WHERE TYPE = 'TV Show' GROUP BY SPLIT_PART(COUNTRY,',',1) HAVING COUNT(*) >= 100 ORDER BY tv_show_count DESC;
该写法先用WHERE过滤出所有剧集类内容,再按拆分后的首个国家分组(合拍剧默认归属第一个标注国家,该逻辑和你原有写法保持一致),最后通过HAVING过滤出剧集数量≥100的国家。
- 全表聚合写法(适合需要同时统计其他类型内容指标的场景)
SELECT SPLIT_PART(COUNTRY,',',1) AS country, COUNT(CASE WHEN TYPE = 'TV Show' THEN 1 END) AS tv_show_count FROM NETFLIX_TITLES GROUP BY SPLIT_PART(COUNTRY,',',1) HAVING COUNT(CASE WHEN TYPE = 'TV Show' THEN 1 END) >= 100 ORDER BY tv_show_count DESC;
该写法通过条件聚合直接在计数时仅统计剧集内容,所有过滤逻辑都可通过HAVING实现,无需提前过滤数据。
内容的提问来源于stack exchange,提问作者Veronika K
相关产品推荐
相关产品推荐

