首页 > 解决方案 > SQL 有和最大值

问题描述

我的查询:

SELECT P.lastname, P.firstname, MAX(MD.movie_id)
FROM Person AS P
INNER JOIN Movie_Directors AS MD ON P.person_id = MD.person_id
INNER JOIN Movie AS M ON M.movie_id = MD.movie_id
GROUP BY P.firstname, P.lastname, MD.movie_id
HAVING MAX(MD.movie_id);

我收到此错误:

在预期条件的上下文中指定的非布尔类型的表达式,靠近 ';'

我需要为下一个问题获取 SQL 选择,我不明白错误有人可以帮忙吗?

查询需要显示迄今为止制作了最多电影的导演 [firstname, lastname]。

标签: sqlsql-server

解决方案


ROW_NUMBER 子句可以帮助您。希望我没有任何错别字。此外,如果您有一个 person_id,我建议您使用它而不是分区的名字、姓氏。

WITH MaxMovies AS  
(
SELECT P.lastname, P.firstname, ROW_NUMBER OVER (PARTITION BY firstname, lastname ORDER BY movie_id DESC) MOVIE_NUMBER
FROM Person AS P
inner join Movie_Directors AS MD ON P.person_id=MD.person_id
inner join Movie AS M ON M.movie_id=MD.movie_id
GROUP BY P.firstname, P.lastname
)
SELECT * FROM MAXMOVIES WHERE MOVIE_NUMBER=1

参考:https ://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017


推荐阅读