如何使用SQL GROUP BY子句找出语言多样性最高的发行年份?
修正SQL以获取语言多样性最高的发行年份
原SQL的问题分析
你提供的错误SQL存在核心逻辑偏差:
SELECT COUNT(DISTINCT release_year) FROM films GROUP BY release_year
按release_year分组后,每个分组内的release_year值唯一,因此COUNT(DISTINCT release_year)的结果永远为1,完全无法体现语言多样性的统计需求。
正确的SQL实现
语言多样性的核心是统计每个发行年份下不重复的语言数量,基于此需求,正确的SQL写法如下:
基础版(返回单个最高多样性年份)
SELECT release_year, COUNT(DISTINCT language) AS language_diversity FROM films GROUP BY release_year ORDER BY language_diversity DESC LIMIT 1;
COUNT(DISTINCT language):统计每个年份下的不重复语言数(自动忽略language为null的记录)GROUP BY release_year:按发行年份分组计算ORDER BY language_diversity DESC:按语言多样性从高到低排序LIMIT 1:取排名第一的年份(若存在多个年份并列最高,仅返回其中一个)
进阶版(返回所有并列最高的年份)
如果需要获取所有语言多样性并列最高的年份,可使用窗口函数RANK():
WITH year_language_stats AS ( SELECT release_year, COUNT(DISTINCT language) AS language_diversity, RANK() OVER (ORDER BY COUNT(DISTINCT language) DESC) AS rank_num FROM films GROUP BY release_year ) SELECT release_year, language_diversity FROM year_language_stats WHERE rank_num = 1;
- 先用CTE计算每个年份的语言多样性及对应排名
- 筛选出排名为1的所有年份,解决并列最高的场景
内容的提问来源于stack exchange,提问作者Sadaf Saleem
相关产品推荐
相关产品推荐

