我在DB2数据库中有以下表:
Products(Category, VendorId, Price)
Vendor(VendorId, Name)
我现在正试图在SQL中制定以下查询:
对于所有类别,请选择类别,价格和供应商ID以及供应商名称 价格是该类别中最高的。
我可以使用
轻松获得每个类别的最高价格SELECT Category, max(Price) FROM Products GROUP BY Category
但是我不能将VendorId添加到SELECT中,因为这给了我一个错误-119,根据手册,这意味着
有条款的栏目或表达无效
但我在查询中没有使用HAVING。制定上述查询的正确方法是什么?
答案 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()