首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电影评论网站

电影评论网站
EN

Stack Overflow用户
提问于 2016-04-06 10:16:30
回答 3查看 175关注 0票数 0

我有一个电影评级网站的表格,看上去如下所示:

  • 电影(MovieID,标题,年份)
  • 评级(ReviewerID,MovieID,评级)
  • 审查员(ReviewerID,姓名)

我想写一个查询,给出最慷慨的评审员最喜欢的电影的名字。目前,我已将任务分为两部分:

-finding是评论者最喜欢的电影的名字:

代码语言:javascript
运行
复制
SELECT DISTINCT Title FROM Movies
NATURAL JOIN Ratings 
WHERE rating IN (SELECT MAX(rating) FROM Ratings)

-finding最高平均评级:

代码语言:javascript
运行
复制
SELECT reviewerID, AVG(rating) AS avg_rating
FROM Ratings
GROUP BY reviewerID
ORDER BY avg_rating DESC LIMIT 1

但我不知道如何将这两个查询连接起来。使用子查询,它不能工作,因为我不能在子查询中限制用户。有人知道如何连接这两个查询吗?或者是不使用子查询的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-06 11:36:16

代码语言:javascript
运行
复制
SELECT m.title
  FROM movies m
  JOIN ratings r
    ON r.movieid = m.movieid
  JOIN 
     ( SELECT reviewerID
         FROM Ratings
        GROUP 
           BY reviewerID
        ORDER 
           BY AVG(rating) DESC 
        LIMIT 1
     ) x
    ON x.reviewerid = r.reviewerid
 ORDER 
    BY r.rating DESC
 LIMIT 5;

或者类似的东西

票数 0
EN

Stack Overflow用户

发布于 2016-04-06 10:18:34

你试过这样的方法吗?

代码语言:javascript
运行
复制
SELECT Title FROM Movies
WHERE movieID = (
    SELECT movieID FROM Ratings WHERE reviewerID=(
        SELECT reviewerID, AVG(rating) AS avg_rating
        FROM Ratings
        GROUP BY reviewerID
        ORDER BY avg_rating DESC LIMIT 1
    )
    ORDER BY rating DESC
    LIMIT 1
);
票数 0
EN

Stack Overflow用户

发布于 2016-04-06 10:24:03

下面是一个使用GROUP BYORDER BYLIMIT 1的解决方案。

代码语言:javascript
运行
复制
SELECT m.Title
FROM Movies as m INNER JOIN Ratings as r USING(movieID) 
GROUP BY m.movieID
ORDER BY AVG(r.rating) DESC
LIMIT 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36448107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档