查找列的最大值,按不同 table 中的列分组
Finding the max value for a column, grouped by a column in a different table
我正在尝试为上述 database/tables 编写一个查询,该查询将 return 每个导演排名最高的电影。
我试过:
SELECT d.id, md.movie_id, m.name, m.year, MAX(m.rank)
FROM directors d
INNER JOIN movies_directors md
ON d.id = md.director_id
INNER JOIN movies m
ON md.movie_id = m.id
GROUP BY d.id
但它是 returning:
[Code: 8120, SQL State: S0001] Column 'movies_directors.movie_id' is invalid in the select list
because it is not contained in either an aggregate function or the GROUP BY clause.
这是每组前一题。您需要某种过滤逻辑而不是聚合。
您通常可以为此使用 row_number()
:
select *
from (
select
d.id,
md.movie_id,
m.name,
m.year,
row_number() over(partition by d.id order by m.rank desc) rn
from directors d
inner join movies_directors md on d.id = md.director_id
inner join movies m on md.movie_id = m.id
) t
where rn = 1
我正在尝试为上述 database/tables 编写一个查询,该查询将 return 每个导演排名最高的电影。
我试过:
SELECT d.id, md.movie_id, m.name, m.year, MAX(m.rank)
FROM directors d
INNER JOIN movies_directors md
ON d.id = md.director_id
INNER JOIN movies m
ON md.movie_id = m.id
GROUP BY d.id
但它是 returning:
[Code: 8120, SQL State: S0001] Column 'movies_directors.movie_id' is invalid in the select list
because it is not contained in either an aggregate function or the GROUP BY clause.
这是每组前一题。您需要某种过滤逻辑而不是聚合。
您通常可以为此使用 row_number()
:
select *
from (
select
d.id,
md.movie_id,
m.name,
m.year,
row_number() over(partition by d.id order by m.rank desc) rn
from directors d
inner join movies_directors md on d.id = md.director_id
inner join movies m on md.movie_id = m.id
) t
where rn = 1