SQL多列分区查询返回重复结果,求助实现年度Genre数量统计
解决Genre按年份统计重复行问题
问题根源
你用COUNT() OVER (PARTITION BY Genre, Release_Year)窗口函数时,它会给拆分后的每一行都计算对应分组的数量,但不会自动合并重复结果。拆分后的表中,同一个Genre+Release_Year组合有多少条记录,结果就会返回多少条带相同统计值的行,所以才会出现大量重复。
两种解决办法
方法1:用GROUP BY(推荐)
这是统计分组数量的标准写法,直接按Genre和Release_Year分组聚合,结果自然每个组合只出一行:
SELECT Genre, Release_Year, COUNT(*) AS Num_genre FROM Movies GROUP BY Genre, Release_Year ORDER BY Release_Year, Num_genre DESC;
COUNT(*)用来数每个分组里的记录数,GROUP BY确保每个Genre+年份的组合仅返回一条统计行。
方法2:保留窗口函数加DISTINCT
如果一定要用窗口函数,可以在外层加DISTINCT过滤重复行:
SELECT DISTINCT Genre, Release_Year, COUNT(Genre) OVER (PARTITION BY Genre, Release_Year) AS Num_genre FROM Movies ORDER BY Release_Year, Num_genre DESC;
不过这种写法效率不如GROUP BY,因为窗口函数会先给所有行计算统计值,再去重,只适合特定场景用。
内容的提问来源于stack exchange,提问作者Jona Chen
相关产品推荐
相关产品推荐

