首页 > 解决方案 > 坚持选择最大行

问题描述

我有一个带有列的表:

ID | FULLNAME | VALUE
01   Joseph     10
02   Sam        50
...  ...       ... 

我需要选择具有最大值的行,并显示如下信息

FULLNAME | VALUE 

我尝试使用 group function MAX(),但我无法选择 fullname,因为如果我将其用作GROUP BY表达式,它将选择 max in groups。

其他方式,是使用WITH语句,按值 desc 排序表,使用

rank() OVER (PARTITION BY ID) AS max_id 

函数和最大值将在 max_id = 1 上,然后使用

WHERE max_id = 1 

删除其他行。

但我认为有一种方法可以做得更好,但我找不到。

更新:

这个问题的一个棘手的解决方案是

SELECT *
FROM t t1
    LEFT JOIN t t2 ON t1.value<t2.value
WHERE t2.value IS NULL

标签: sqlgroup-bymax

解决方案


最简单的方法是对数据进行排序并拉出一行:

select t.*
from t
order by value desc
fetch first 1 row only;

如果你想要领带,你可以添加with tiesfetch first.

另一种方法是:

select t.*
from t
where t.value = (select max(t2.value) from t t2);

这可以在索引上具有非常好的性能value


推荐阅读