MAX函数在where子句mysql中

时间:2014-03-20 15:50:54

标签: mysql sql max greatest-n-per-group

如何在mysql查询的where子句中使用max()函数,我正在尝试:

 select firstName,Lastname,MAX(id) as max where id=max;

这给了我一个错误:

Unknown column 'max' in 'where clause'

任何帮助?提前谢谢。

8 个答案:

答案 0 :(得分:43)

您不能在同一查询的WHERE子句中引用聚合函数的结果(例如MAX())。

解决此类问题的规范模式是使用内联视图,如下所示:

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
  JOIN ( SELECT MAX(mx.id) AS max_id
           FROM mytable mx
       ) m
    ON m.max_id = t.id

这只是获取指定结果的一种方法。还有其他几种方法可以获得相同的结果,其中一些方法的效率远低于其他方法。其他答案证明了这种方法:

 WHERE t.id = (SELECT MAX(id) FROM ... )

有时,最简单的方法是使用带有LIMIT的ORDER BY。 (请注意,此语法特定于MySQL)

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
 ORDER BY t.id DESC
 LIMIT 1

请注意,这只会返回一行;因此,如果有多个具有相同id值的行,则不会返回所有这些行。 (第一个查询将返回具有相同id值的所有行。)

可以扩展此方法以获得多行,您可以通过将其更改为LIMIT 5来获取具有最高id值的五行。

请注意,此方法的性能尤其取决于可用的合适索引(即,id作为PRIMARY KEY或另一个索引中的前导列。)合适的索引将提高使用所有索引的查询性能这些方法。

答案 1 :(得分:13)

使用子选择:

SELECT row  FROM table  WHERE id=(
    SELECT max(id) FROM table
)

注意:ID必须是唯一的,否则返回多行

答案 2 :(得分:5)

SELECT firstName, Lastname, MAX(id) as max WHERE YOUR_CONDITIONS_HERE HAVING id=max(id) 

答案 3 :(得分:4)

某些Mysql版本不允许在子选择内部使用“限制”。 我对你(以及将来的我)的回答是使用群组

select firstName,Lastname,id 
where {whatever}
group by id
having max(id)

这使您可以在选择区域中返回任何内容,而无需聚合字段。

答案 4 :(得分:2)

您使用的语法不正确。查询应该类似于:

SELECT column_name(s) FROM tablename WHERE id = (SELECT MAX(id) FROM tablename)

答案 5 :(得分:2)

您想要具有最大ID的行的名字和姓氏吗?

如果是这样(你错过了一个FROM子句):

SELECT firstname, lastname, id
FROM foo
ORDER BY id DESC
LIMIT 1;

答案 6 :(得分:2)

此查询应该会返回您想要的数据。 将foo替换为您正在使用的表名。

SQL查询:

select firstName,Lastname, id 
from foo 
having max(id) = id 

答案 7 :(得分:-3)

您使用“max”一词作为列的别名。尝试:

MAX(id) as mymax ... WHERE ID - mymax