SQL查找多行的最大值

SQL查找多行的最大值,sql,Sql,数据集 名称编号值 阿拉巴马254100 图集156 200 阿拉巴马州354300 阿特拉斯800 400 SQL语句,以返回每个名称的最大数目 预期结果 阿拉巴马州354300 阿特拉斯800 400 您可以在PostgreSQL中使用distinct on: select distinct on (name) * from table t order by name, number desc; 您可以使用行编号()进行常规操作: select t.* from (select t.*,

数据集

名称编号值
阿拉巴马254100
图集156 200
阿拉巴马州354300
阿特拉斯800 400
SQL语句,以返回每个名称的最大数目

预期结果

阿拉巴马州354300 阿特拉斯800 400
您可以在
PostgreSQL
中使用
distinct on

select distinct on (name) *
from table t
order by name, number desc;
您可以使用
行编号()
进行常规操作:

select t.*
from (select t.*, row_number() over (partition by name order by number desc) as seq
      from table t
     ) t
where seq = 1;

如果数字有关联,则可以使用
rank()

在使用
SQL Server
MySQL
的情况下,您可以将
MAX()
函数与group by一起使用。试试看:

SELECT Name,MAX(Number),MAX(Value) 
FROM myTable 
GROUP BY Name

您可以使用just max函数查找最大值
喜欢


您可以先按编号订购,然后按名称分组,如下所示:

SELECT DISTINCT 
name, MAX(number) AS number, MAX(value) AS value
FROM table
GROUP BY name
SQL语句,以返回每个名称的最大数目

你所描述的听起来像:

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

在大多数数据库中,它具有最佳或接近最佳的性能,索引位于
(名称、编号)

MySQL、SQL Server或PostgreSQL?我已经删除了多个RDNMS标签,请随意添加相关的标签。如果您有
(阿拉巴马州,400,10)
?那么预期的输出是什么?返回每个名称的最大数量。如果是这样,为什么在所需的输出中显示
Value
列?添加行(Atlas,500,500)并调整预期结果-如果需要。Max Number并返回所有列以供参考,请参阅我不能使用Max(Value),因为Value字段不一定是我要选择的Max。MAX必须是唯一的数字。但是如果你真的想要值,那么你必须想要所有值中的任何一个,因为正如你所说的,如果你只想要阿拉巴马州的一张记录,那么阿拉巴马州不可能有多个值,对吗?
select t.*
from t
where t.number = (select max(t2.number) from t t2 where t2.name = t.name);