提问者:小点点

使用mysql根据电视剧类型中的超级热门电影(平均评分>8)的数量,谁是前3位女演员


 SELECT n.name as actress_name , r.total_votes , COUNT(r.movie_id) as movie_count, r.avg_rating as actress_avg_rating, 
    RANK() OVER( 
                ORDER BY 
                COUNT(r.movie_id) DESC
                ) actress_rank
    FROM names as n
    INNER JOIN role_mapping as rm
    ON n.id = rm.name_id
    INNER JOIN movie as m
    ON rm.name_id = m.id
    INNER JOIN ratings as r
    ON m.id = r.movie_id
    INNER JOIN genre as g
    ON g.movie_id = r.movie_id
    WHERE r.avg_rating > 8 AND g.genre = 'Drama' AND rm.category ='actress'
    GROUP BY actress_name
    LIMIT 3;


共1个答案

匿名用户

您只需要在分析函数中进行分区,例如

SELECT *
  FROM
  (
   SELECT n.name AS actress_name , r.total_votes , 
          COUNT(r.movie_id) AS movie_count, r.avg_rating as actress_avg_rating, 
          RANK() OVER( PARTITION BY n.name
                           ORDER BY COUNT(r.movie_id) DESC
                     ) AS actress_rank      
     FROM names AS n
     JOIN role_mapping AS rm
      ON n.id = rm.name_id
     JOIN movie AS m
      ON rm.name_id = m.id
     JOIN ratings AS r
      ON m.id = r.movie_id
     JOIN genre AS g
      ON g.movie_id = r.movie_id
      WHERE r.avg_rating > 8 AND g.genre = 'Drama' AND rm.category ='actress'
      GROUP BY actress_name   
  ) q
 WHERE actress_rank <= 3