【问题标题】:Finding the max value for a column, grouped by a column in a different table查找列的最大值,按不同表中的列分组
【发布时间】:2020-08-21 04:23:59
【问题描述】:

我正在尝试为上述数据库/表编写一个查询,该查询将返回每个导演排名最高的电影。

我试过了:

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

但它正在返回:

[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.

【问题讨论】:

    标签: sql sql-server tsql join greatest-n-per-group


    【解决方案1】:

    这是一个 top-1-per-group 问题。您需要某种过滤逻辑,而不是聚合。

    您通常可以为此使用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
    

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多