在SQL Server中保持字段A的最小值和字段B的对应值

时间:2017-02-22 12:14:25

标签: sql sql-server group-by aggregate-functions min

说我有下表:

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

我提出的解决方案似乎效率低下且看起来非常简单。

2 个答案:

答案 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