我对SQL很陌生,我试图只显示一本有最贵书的类别。我的第一个想法是从max(books.purchase_price)
中删除select
并将max(books.purchase_price) = books.purchase_price
添加到where
部分。但这给了我一个错误信息。
select categories.category, max(books.purchase_price) as price
from books, categories
where categories.category_id = books.category_id
group by categories.category
order by pris desc
limit 1
只有两个表:books
,其中包含标题,价格和category_id
的条目;和categories
有category_id
和不同的类别(名称)。
如果您只想要一条最大记录,请使用以下查询:
SELECT c.category
FROM books b
INNER JOIN categories c
ON c.category_id = b.category_id
ORDER BY b.purchase_price DESC
LIMIT 1;
这按照购买价格按降序排序(即最昂贵的第一个),然后限制为单个记录。请注意,我使用了显式的内连接,而不是上面使用的隐式旧学校连接。
如果可能有几本书以最高价格捆绑,那么我们将不得不求助于使用RANK
函数:
SELECT DISTINCT category
FROM
(
SELECT c.category,
RANK() OVER (ORDER BY b.purchase_price DESC) rank
FROM books b
INNER JOIN categories c
ON c.category_id = b.category_id
) t
WHERE t.rank = 1;