在SQL中,是否有一种简单的方法来返回包含一列中值的最高实例的所有行?
给出下表...
Size Color Price
S Red 1
S Green 4
S Blue 7
M Olive 45
M Black 99
M Orange 153
L Purple 4
L Red 75
L Blue 98
我想回来...
Size Color Price
S Red 1
M Olive 45
L Purple 4
答案 0 :(得分:3)
您可以尝试使用CTE
函数和ROW_NUMBER()
来完成此操作:
这完成了您在评论中所说的 下降
;WITH CTE AS(
SELECT myTable.*
, RN = ROW_NUMBER()OVER(PARTITION BY Size ORDER BY Price DESC)
FROM myTable
)
SELECT Size, Color, Price FROM CTE
WHERE RN = 1
这可以达到您想要的结果:
;WITH CTE AS(
SELECT myTable.*
, RN = ROW_NUMBER()OVER(PARTITION BY Size ORDER BY Price ASC)
FROM myTable
)
SELECT Size, Color, Price FROM CTE
WHERE RN = 1
ORDER BY
CASE Size
WHEN 'S' THEN 1
WHEN 'M' THEN 2
WHEN 'L' THEN 3
END
这里有一个示例SQL FIDDLE,因此您可以观看演示。
答案 1 :(得分:-1)
您需要对数据进行分区,以获取分配给每个分区大小的行数,然后取第一个分区,如下所示
Select size, color, price from
(Select Size, Color,Price,
row_number()
over (partition by size order by
Price) as rn
from mytable) t where t.rn =1