【问题标题】:Max() in sql querysql查询中的max()
【发布时间】:2013-04-08 05:58:15
【问题描述】:

我的表中有一些记录。

我想选择一个有最大年龄的记录

如果我写在下面的查询它工作正常。

Select MAX(Age)
From Table

一切正常。但是如果我这样写,

Select FirstName, LastName, MAX(Age)
From Table
Group By FirstName, LastName

它不工作(显示所有记录)。我该如何解决这个问题?

【问题讨论】:

  • SQL 只是 结构化查询语言 - 许多数据库系统使用的语言,但不是数据库产品...很多事情都是特定于供应商的 - 所以我们真的需要知道您使用的是什么数据库系统(以及哪个版本)......

标签: sql database db2


【解决方案1】:

您可以使用子查询来获取最大的Age,并比较外部查询的年龄。

Select  *
From    TableName
WHERE   Age = (SELECT MAX(Age) FROM TableName)

简要说明,在您的查询中使用 GROUP BY 并不能完全满足您的要求,因为它不是过滤运算符并且只对非聚合列进行分组。例如,您有两条名字和姓氏相同但年龄不同的记录,由于使用了MAX(),结果将是年龄最大的人。

【讨论】:

    【解决方案2】:

    由于使用 max(Age) 您将获得单条记录,而 FirstName,LastName 有多条记录。

    你正在一起使用它,因此它会产生歧义。

    Select FirstName, LastName from From Table where Age = (SELECT MAX(Age) FROM Table)
    

    使用这个查询。

    【讨论】:

    • 哇。就这么简单。不明白这个想法。谢谢你。
    【解决方案3】:

    另一种方法是使用not exists

    Select * from Table t1
    where not exists (select 1 from Table where age > t1.age)
    

    【讨论】:

      【解决方案4】:

      我会建议这种简单的方法:

      select *
      from table
      order by age desc
      fecth 1 rows only
      

      请注意,这只会选择一条记录,而不是选择所有具有最长年龄的记录。

      【讨论】:

        猜你喜欢
        • 2012-12-26
        • 2011-12-11
        • 2011-10-01
        • 2020-10-07
        • 1970-01-01
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多