Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL server中保留字段A的最小值和字段B的相应值_Sql_Sql Server_Group By_Aggregate Functions_Min - Fatal编程技术网

在SQL server中保留字段A的最小值和字段B的相应值

在SQL server中保留字段A的最小值和字段B的相应值,sql,sql-server,group-by,aggregate-functions,min,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 我提出的解决方案似乎效率低下,而且很

假设我有下表:

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

我提出的解决方案似乎效率低下,而且很难看,因为有些东西似乎很简单。

一个典型的解决方案是使用行数:


您认为这是否优雅是一个意见问题。

一个典型的解决方案是使用行号:


您认为这是否优雅是一个意见问题。

下面的解决方案使用了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

下面的解决方案使用了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