sql - 坚持选择最大行
问题描述
我有一个带有列的表:
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
解决方案
最简单的方法是对数据进行排序并拉出一行:
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
。
推荐阅读
- asp.net - Global.asax.cs 中的 VS 2019 解析器错误中的 ASP.NET MVC 应用程序
- java - 使用 graphql-java-kickstart 库的 GraphQL 和数据加载器
- java - Java 动态创建按钮并将参数传递给执行的操作
- php - 调用 POST 请求路由在 URL 中包含 index.php
- c# - 分配后意外的不等式
- javascript - 在 Mechanical Turk 人群中使用 Youtube Player API 不会触发 OnStateChange
- flask - 烧瓶部署到heroku
- python - 使用棉花糖反序列化 UUID
- outlook-redemption - 使用兑换更改 Outlook 中的发件人,但不使用配置文件中的帐户
- elasticsearch - Elasticsearch:有些字段会立即出现,有些字段会延迟出现