说我有下表:
Category rank score
a 3 100
a 1 105
a 2 110
b 2 102
b 7 107
b 3 95
我想知道最有效和最直观的方式,让每个类别的排名都达到最低排名。
在我的例子中,结果将是
Category rank score
a 1 105
b 2 102
我提出的解决方案似乎效率低下且看起来非常简单。
答案 0 :(得分:3)
典型的解决方案是使用row_number()
:
select category, rank, score
from (select t.*,
row_number() over (partition by category order by rank) as seqnum
from t
) t
where seqnum = 1;
你认为这是否优雅是一个观点问题。
答案 1 :(得分:1)
以下解决方案使用了CTE的概念......
with cte as
(
select category, rank, score, ROW_NUMBER() OVER(PARTITION BY category ORDER BY rank ) AS row_num
from t
)
select category, rank, score from cte
where row_num=1