DB2按

时间:2016-01-25 10:28:02

标签: sql db2 greatest-n-per-group

我在DB2数据库中有以下表:

Products(Category, VendorId, Price)
Vendor(VendorId, Name)

我现在正试图在SQL中制定以下查询:

  

对于所有类别,请选择类别,价格和供应商ID以及供应商名称   价格是该类别中最高的。

我可以使用

轻松获得每个类别的最高价格
SELECT Category, max(Price) FROM Products GROUP BY Category

但是我不能将VendorId添加到SELECT中,因为这给了我一个错误-119,根据手册,这意味着

  

有条款的栏目或表达无效

但我在查询中没有使用HAVING。制定上述查询的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

使用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()