MySQL 从每个值中选择 max()
Posted
技术标签:
【中文标题】MySQL 从每个值中选择 max()【英文标题】:MySQL Select max() from every Value 【发布时间】:2020-07-04 05:47:19 【问题描述】:我有办法获得每个值的max()
值吗?
我有一张这样的桌子:
id primary key
name foreign key
age
我需要每个名字的最高年龄。例如:
ID NAME AGE
1, Marco, 12
2, Jason, 23
3, Tom, 5
4, Marco, 16
5, Jason, 22
输出应该是:
ID NAME AGE
2, Jason, 23
3, Tom, 5
4, Marco, 16
这可能吗?怎么做? 谢谢。
【问题讨论】:
【参考方案1】:试试这个:
select id,name,max(age) over(partition by name) as max_age from table group by id,name;
【讨论】:
【参考方案2】:您可以使用聚合获得每列的最大值:
select max(id), name, max(age)
from t
group by name;
但是,如果您想要具有最大年龄的完整行,那将是:
select t.*
from t
where t.age = (select max(t2.age) from t t2 where t2.name = t.name);
【讨论】:
为了完整起见,值得注意的是,这个(优秀的)答案将为您提供一个名称的多个结果,在任何情况下,如果您与该名称的最老存在并列。【参考方案3】:你可以使用聚合:
select min(id) id, name, max(age) age from mytable group by name
【讨论】:
@stickybit:是的。但是max(id)
为 Jason 提供了 5
而不是 2
!
我认为他们既不想要min(id)
也不想要max(id)
,而是想要最大年龄记录的id
。
@stickybit:我认为你是对的。接受的答案为此提供了解决方案。【参考方案4】:
你可以从子查询中得到max age
和name
,然后左连接得到它的ID
。
SELECT b.id, a.name, a.maxage
FROM (SELECT name, MAX(age) AS maxage
FROM table
GROUP BY NAME
) a
LEFT JOIN table b ON a.NAME = b.NAME AND a.maxage= b.AGE
【讨论】:
以上是关于MySQL 从每个值中选择 max()的主要内容,如果未能解决你的问题,请参考以下文章