卡在 select 最大行
Stuck to select maximum row
我有一个 table 列:
ID | FULLNAME | VALUE
01 Joseph 10
02 Sam 50
... ... ...
我需要 select 具有最大值的行,并显示类似
的信息
FULLNAME | VALUE
我尝试使用组函数 MAX()
,但我不能 select 全名,因为如果我将它用作 GROUP BY
表达式,它将 select max在组中。
其他方式,就是使用WITH
语句,按值desc排序table,使用
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
最简单的方法是对数据进行排序并拉取一行:
select t.*
from t
order by value desc
fetch first 1 row only;
如果您想要平局,可以将 with ties
添加到 fetch first
。
另一种方法是:
select t.*
from t
where t.value = (select max(t2.value) from t t2);
在 value
.
上的索引可以有很好的性能
我有一个 table 列:
ID | FULLNAME | VALUE
01 Joseph 10
02 Sam 50
... ... ...
我需要 select 具有最大值的行,并显示类似
的信息FULLNAME | VALUE
我尝试使用组函数 MAX()
,但我不能 select 全名,因为如果我将它用作 GROUP BY
表达式,它将 select max在组中。
其他方式,就是使用WITH
语句,按值desc排序table,使用
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
最简单的方法是对数据进行排序并拉取一行:
select t.*
from t
order by value desc
fetch first 1 row only;
如果您想要平局,可以将 with ties
添加到 fetch first
。
另一种方法是:
select t.*
from t
where t.value = (select max(t2.value) from t t2);
在 value
.