2017-09-26 56 views
-1

我試圖去顯示只有最昂貴的項目類別。如何使用2個表格獲得某個類別中最昂貴的商品?

我試過了,並且我已經查詢了所有類別和每個類別中最昂貴物品的價格,但是我不知道如何才能得到最昂貴的一個類別。

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)) 
+0

爲什麼不從'(您的查詢)中選擇類別作爲q'? –

+0

如果存在關係,即兩個不同的書籍具有相同的最高值價錢? – jarlh

回答

0

您可以嘗試max(purchase_price) desc訂購併佔據第一位:

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

我知道,但如果我這樣做,所有類別仍然會顯示,我知道哪些類別有最昂貴的項目,但我只希望該類別顯示 – Jossi94

+0

有限制1你只會得到一行返回。 – jarlh

+0

不幸的是,你需要使用子查詢來做到這一點:你需要獲得最昂貴的類別,通過max(purchase_price)排序,然後取第一個。 – NikNik

0

你只需要使用別名,因此您可以在重新使用它們GROUP BY部分,並使用top 1只有在您訂購max(b.purchase_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; 
+0

這並不能解決問題。 OP希望返回一行,而不是每個類別一個。 – jarlh

+0

我編輯了答案,所以它只有一行。 –

+1

我不認爲Postgresql支持MS SQL Server的「TOP 1」結構。除了ORDER BY缺失。 – jarlh

1
select categories.category ,purchase_price as dyrast_bok 
from categories 
inner join books on categories.category_id = books.category_id 
where purchase_price in (select max(purchase_price) from books) 
0

簡單的方法:有一個子查詢,返回最大purchase_price。

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不支持FETCH FIRST WITH TIES。)

相關問題