如果我有一张水果桌:
FruitId ColorId NumofPurchased
。
我想为每个colorId返回一行,其中NumOfPurchased是该colorId的最大值。我想出的方法是循环使用colorId或手动编写10种颜色的10个查询...我不知道,有更好/更优化的方法吗?
我正在使用SQL Server 2008 express。
答案 0 :(得分:1)
SELECT MAX(NumOfPurchased), ColorId, FruitId
FROM fruit
GROUP BY ColorId, FruitId
这应该可以解决问题。
答案 1 :(得分:0)
不确定这是否正是您想要的(无论是所有水果中每种颜色的最大值,还是每种水果的每种颜色的最大值) - 但您可以更改/添加PARTITION BY
子句的值必要的。
;with fruitCTE
AS
(
SELECT FruitId, ColorId, NumofPurchased,
ROW_NUMBER() OVER (PARTITION BY ColorId,
ORDER BY NumofPurchased DESC
) AS rn
FROM fruit
)
SELECT FruitId, ColorId, NumofPurchased,
FROM fruitCTE
WHERE rn = 1;