【问题标题】:List in descending order of their average with at least 2 ratings and average above 3 SQL以至少 2 个评分且平均高于 3 个 SQL 的平均降序排列
【发布时间】:2018-10-10 02:54:55
【问题描述】:

我有 2 张不同的桌子。 表 1 - “评级”

 movie_ID   Rating
 12100      5
 12200      4
 12100      4
 12230      5
 12200      3
 12450      4

还有表 2 - “电影”

 movie_ID  Title
 12100      ABBA
 12200      BCCA
 12230      AVDG
 12450      DLPS

我正在尝试根据movie_ID 至少有两个评分且平均值高于3 的平均值来获得列表的前2 名。

我正在使用以下命令,但我不知道如何添加因子,以便 SQL 查找具有至少 2 个评级且平均评级高于 3 的数据

 select top 2 m.movie_ID, m.title, avg(r.rating) as avg_rating
 from movies m inner join
 Ratings r>2
 on m.movie_ID = r.movie_ID
 group by m.movie_ID, m.title
 order by avg(r.rating) desc; 

【问题讨论】:

    标签: sql database


    【解决方案1】:

    在 MSSQL 上测试

    select top(2) Movies.movie_ID, Movies.Title, avg(Rating.Rating) as [Avg_Rating]
    from Movies
    join Rating on
        Movies.movie_ID =   Rating.movie_id and
        Rating.Rating > 1
    Group by Movies.movie_ID, Movies.Title
    having avg(Rating.Rating) >2
    order by avg(Rating.Rating) Desc
    

    【讨论】:

      【解决方案2】:

      本题旨在教你the difference between WHERE and HAVING。既然你做了GROUP BY,并且你希望通过评分数和平均值进行过滤,你需要删除WHERE并将条件放入HAVING

      select top 2
          m.movie_ID
      ,   m.title
      ,   avg(r.rating) as avg_rating
      from movies m
      inner join Ratings r on m.movie_ID = r.movie_ID
      group by m.movie_ID, m.title
      -- Since you are using GROUP BY, the filter goes here:
      having count(*) >= 2 AND avg(r.rating) > 3
      order by avg(r.rating) desc; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多