【问题标题】:How to order books by users rate如何按用户价格订购书籍
【发布时间】:2019-08-29 01:34:56
【问题描述】:

我正在尝试按用户评分描述检索所有书籍:

我将费率保存在中间表 BooksRates 中,因为同一本书会有多个费率,现在我想在一个查询中从数据库中检索前 10 部评分最高的书,其中也包含费率。

例如:

哈利波特 4.5 率

SELECT T1.*, T2.AVG(T2.Rate) AS Rate
    FROM Books AS T1 
    INNER JOIN BookRates as T2
    ON T1.BookId = T2.BookId
    GROUP BY T1.BookId
    ORDER BY Rate desc

此查询未返回所需的结果。

【问题讨论】:

    标签: sql-server select sql-order-by


    【解决方案1】:

    首先,您使用group by 获得每个BookId 的平均Rate,然后加入Books 以获取每本书的详细信息:

    SELECT b.*, g.Rate FROM Books AS b INNER JOIN ( 
        SELECT T1.BookId, AVG(T2.Rate) AS Rate
        FROM Books AS T1 
        INNER JOIN BookRates as T2
        ON T1.BookId = T2.BookId
        GROUP BY T1.BookId
    ) AS g on g.BookId = b.BookId
    ORDER BY g.Rate desc
    

    如果有书籍没有评分,那么你必须使用左连接:

    SELECT b.*, coalesce(g.Rate, 0) AS Rate FROM Books AS b LEFT JOIN ( 
        SELECT T1.BookId, AVG(T2.Rate) AS Rate
        FROM Books AS T1 
        INNER JOIN BookRates as T2
        ON T1.BookId = T2.BookId
        GROUP BY T1.BookId
    ) AS g on g.BookId = b.BookId
    ORDER BY coalesce(g.Rate, 0) desc
    

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 2020-07-04
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 2021-03-21
      相关资源
      最近更新 更多