【问题标题】:MySQL Select max() from every ValueMySQL 从每个值中选择 max()
【发布时间】: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

这可能吗?怎么做? 谢谢。

【问题讨论】:

    标签: mysql sql database select greatest-n-per-group


    【解决方案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 agename,然后左连接得到它的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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        相关资源
        最近更新 更多