排名超过2列-SQL

排名超过2列-SQL,sql,sql-server,Sql,Sql Server,我需要在这个数据库上运行一个报告,但我不知道如何才能得出最终结果。我希望你能理解这个问题 这是我正在处理的数据库的ERD。 我需要生成一份报告,根据每种类型和每年的平均评级对电影进行排名 结果应该与此类似: YEAR | Genre | Movie Name | Rating | Rank 2017 | Fantasy | Starwars3 | 5 | 1 2012 | Fantasy | Starwars1 | 4 | 2 到目前为止,我所做的代码如下所示

我需要在这个数据库上运行一个报告,但我不知道如何才能得出最终结果。我希望你能理解这个问题

这是我正在处理的数据库的ERD。 我需要生成一份报告,根据每种类型和每年的平均评级对电影进行排名

结果应该与此类似:

YEAR | Genre   | Movie Name | Rating | Rank 
2017 | Fantasy | Starwars3  | 5      | 1
2012 | Fantasy | Starwars1  | 4      | 2
到目前为止,我所做的代码如下所示

SELECT f.year, g.name,f.title, AVG(rating), RANK() OVER (ORDER BY AVG(rating))
FROM Film f
JOIN FilmGenre fg
ON (fg.filmid=f.id)
JOIN Genre g 
ON (g.id=fg.genreId)
GROUP BY CUBE (f.year,g.name)

代码给出错误,提前感谢。

对于示例结果,您可能希望:

SELECT f.year, g.name, f.title, f.rating),
       RANK() OVER (ORDER BY rating DESC) as ranking
FROM Film f JOIN
     FilmGenre fg
     ON fg.filmid = f.id JOIN
     Genre g 
     ON g.id = fg.genreId
GROUP BY f.year, g.name, f.title, f.rating;

也给我们看看错误@jarlh-列(group by中未使用的列)在选择列表中无效,因为它不包含在聚合函数或group by子句中。MySQL不支持
over()
,也不支持
cube()
rank()
。但看起来你用的是Access。嗯。。。正如错误所述。。。当您有任何聚合函数时,您不能将列包括在选择列表中a)未聚合或b)不在
组中(这里
f.title
是一个明显的违规者)。@juergend对不起,我是说Microsoft SQL Server