[英]DB2 Selecting maximum row with group by
我在DB2數據庫中具有以下表:
Products(Category, VendorId, Price)
Vendor(VendorId, Name)
我現在正在嘗試在SQL中制定以下查詢:
對於所有類別,請選擇“類別”,“價格”,“供應商ID”和“供應商名稱”,其中“價格”是類別中最高的。
我可以輕松獲得每個類別的最高價格
SELECT Category, max(Price) FROM Products GROUP BY Category
但是我不能將VendorId添加到SELECT中,因為這會給我一個錯誤-119,根據手冊,這意味着
有效條款中的列或表達式無效
但是我在查詢中沒有使用HAVING。 制定上述查詢的正確方法是什么?
為此,使用row_number(),如下所示:
select
pv.Category, pv.Price, pv.VendorId, pv.Name
from (
select
p.Category, p.Price, p.VendorId, v.Name
, ROW_NUMBER() OVER(PARTITON BY p.Category ORDER BY p.Price DESC) as rowno
from Products p
inner join Vendor v ON p.VendorId = v.VendorId
) pv
where pv.rowno = 1
這種方法使您可以找到包含每個類別中最高價格的整行。 對於“來自每個客戶的最新訂單”之類的事情也很有用
請注意,如果您有滿足“每個類別的最高價格”條件的多種產品,並且希望結果中的所有這些行都使用RANK()或DENSE_RANK()而不是ROW_NUMBER()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.