【问题标题】: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