簡體   English   中英

DB2選擇分組依據的最大行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM