Sql 如何使用两个表获得类别中最昂贵的商品?

Sql 如何使用两个表获得类别中最昂贵的商品?,sql,postgresql,Sql,Postgresql,我试图只显示最昂贵的商品类别 我试过了,通过查询,我得到了所有类别以及每个类别中最昂贵物品的价格,但我不知道如何只得到最昂贵的一个类别 select categories.category ,max(purchase_price) as dyrast_bok from categories inner join books on categories.category_id = books.category_id group by categories.category; 各表: CATEGO

我试图只显示最昂贵的商品类别

我试过了,通过查询,我得到了所有类别以及每个类别中最昂贵物品的价格,但我不知道如何只得到最昂贵的一个类别

select categories.category ,max(purchase_price) as dyrast_bok
from categories
inner join books on categories.category_id = books.category_id
group by categories.category;
各表:

CATEGORIES ( category_id (PK), category )

BOOKS ( book_id (PK), title, publisher_id (FK), published_year,
 purchase_price, category_id (FK),purchase_date, pages,
 book_type_id (FK) )

您可以尝试按
max(purchase_price)desc
下单,然后选择第一个:

select *
from (your query with order by max(purchase_price) desc)
limit 1

您只需使用别名,就可以在
分组依据
部分中重复使用它们,并且当您按
max(b.purchase\u price)
订购时,使用别名只能获得最高的结果

您的查询应该是这样的:

select top 1 c.category , max(b.purchase_price) as dyrast_bok
from categories c
inner join books b on categories.category_id = books.category_id
order by dyrast_bok 
group by c.category;

简单方法:使用一个子查询返回最大购买价格

select c.category, b.purchase_price as dyrast_bok
from categories c
inner join books b on c.category_id = b.category_id
where b.purchase_price = (select max(purchase_price) from books)
如果打成平局,我们将退还两本书

替代解决方案:

select c.category, b.purchase_price as dyrast_bok
from categories c
inner join books b on c.category_id = b.category_id
order by b.purchase_price desc
fetch first 1 row

将不包括领带,只返回一行。(AFAIK Postgresql不支持使用TIES先获取。)

我知道,但如果我这样做,所有类别仍将显示,我知道哪个类别的项目最昂贵,但我只希望该类别显示限制为1的项目,您将只返回一行。不幸的是,您需要使用子查询:您需要获取类别最昂贵的项目,按最高(购买价格)订购,然后取第一本。为什么不
从(您的查询)中选择类别作为q
?…如果出现平局,即两本不同的书具有相同的最高价格,预期结果如何?这并不能回答问题。OP希望返回一行,而不是每个类别返回一行。我认为Postgresql不支持MS SQL Server的
Top1
构造。除此之外,还有一份订单不见了。
select c.category, b.purchase_price as dyrast_bok
from categories c
inner join books b on c.category_id = b.category_id
order by b.purchase_price desc
fetch first 1 row