簡體   English   中英

如何使用group by編寫sql查詢

[英]How to write sql query using group by

我有這張桌子:

actors(id: int, first_name: string, last_name: string, gender: string)
directors(id: int, first_name: string, last_name: string)
directors genres(director id: int, genre: string, prob: 
float)
movies(id: int, name: string, years: int, rank: 
float,)
movies directors(director id: int, movie id: int)
movies genres(movie id: int, genre: string)
roles(actor id: int, movie id: int, role: string)

我想查找每種類型的年份,在該年份中制作該類型的電影最多。

我正在執行以下操作,但遇到問題,請幫忙!

select m.YEAR, count(m.year) as c, genre 
from movies_genres, 
     movies m 
where m.id = movies_genres.movie_id 
group by genre, m.year;

您將獲得每年每種流派的電影數量,這非常好。 現在,您只需要通過將查詢作為派生表來選擇最大值。

select genre, year, max(c) mc
from
    (select m.YEAR, count(m.year) as c, genre 
    from movies_genres mg
         inner join movies m
             on m.id = mg.movie_id 
    group by genre, m.year)
group by genre, year

如果您使用的是SQL Server或Oracle或DB2,則應該可以使用。

SELECT genre, year, number
FROM 
(
  SELECT genre, year, number,
         row_number() over (PARTITION BY genre ORDER BY number DESC) as rank
  FROM
  (
    SELECT mg.genre, m.year, count(*) as number
    FROM movies_genres mg
    JOIN movies m on m.id = mg.movie_id
    GROUP BY mg.genre, m.year
  ) A
) B
WHERE rank = 1

工作原理:從內到外,首先您要獲得所有流派和年份的計數。 然后,您可以按計數對每種類型的年份進行排名,最后選擇最大的項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM