【问题标题】:Select multiple rows with MAX value选择具有 MAX 值的多行
【发布时间】:2021-10-06 16:56:21
【问题描述】:

鉴于此表:

players(id,team,name,age)

我想为每支球队选择年龄最大的球员

到目前为止我的查询:

select p.team,p.name,MAX(p.age)
from players p
group by p.team

此查询为我提供了每支球队中最年长的球员,但如果有多个球员的 MAX 年龄相同,它只会随机选择其中一个。 我怎样才能使它选择所有这些?

【问题讨论】:

  • 您应该标记您的数据库。对于许多数据库来说,这个查询是无效的(并且作为一个错误,在某些数据库中不被接受为无效)。如果是 MS SQL Server(但在 MS SQL 中,此查询无效),则对您的问题的回答可能类似于“with ties”。您应该从结果列表中删除 p.name 以开始。
  • @Cetin Basoz 我使用了一个在线工具来使用 MySQL 5.6 进行查询
  • 我已经添加了 MySQL 标签
  • 那个在线工具正在创建无效查询。不要使用恕我直言。

标签: mysql sql database


【解决方案1】:

这个查询:

select p.team, p.name, MAX(p.age)
from players p
group by p.team;

应该返回一个语法错误。 group by 子句与select 不一致,因为p.name 不在group by 中,也不是聚合函数的参数。

要做你想做的事,你可以使用相关子查询:

select p.*
from players p
where p.age = (select max(p2.age) from players p2 where p2.team = p.team);

【讨论】:

  • 谢谢!如果我对 p 的每一行都理解得很好,则检查年龄是否等于对表的另一个副本的查询结果,其中仅考虑 team 的值与 p 中的值对应的行。
  • @Mizzet 。 . .是的,你很好理解。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 2018-06-06
相关资源
最近更新 更多