如何在mysql查询的where子句中使用max()函数,我正在尝试:
select firstName,Lastname,MAX(id) as max where id=max;
这给了我一个错误:
Unknown column 'max' in 'where clause'
任何帮助?提前谢谢。
答案 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