use*_*971 31 mysql sql max greatest-n-per-group
我如何在mysql查询的where子句中使用max()函数,我正在尝试:
select firstName,Lastname,MAX(id) as max where id=max;
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
Unknown column 'max' in 'where clause'
Run Code Online (Sandbox Code Playgroud)
任何帮助?提前致谢.
spe*_*593 46
您不能在同一查询的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
Run Code Online (Sandbox Code Playgroud)
这只是获取指定结果的一种方法.还有其他几种方法可以获得相同的结果,其中一些方法的效率远低于其他方法.其他答案证明了这种方法:
WHERE t.id = (SELECT MAX(id) FROM ... )
Run Code Online (Sandbox Code Playgroud)
有时,最简单的方法是使用带有LIMIT的ORDER BY.(注意,这种语法特定于MySQL)
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
ORDER BY t.id DESC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
请注意,这将只返回一行; 因此,如果有多个具有相同id值的行,则不会返回所有这些行.(第一个查询将返回具有相同id值的所有行.)
这种方法可以扩展为获得多行,您可以通过将其更改为具有最高id值的五行MAX()
.
请注意,此方法的性能尤其取决于可用的合适索引(即,WHERE
使用PRIMARY KEY或另一个索引中的前导列.)合适的索引将使用所有这些方法来提高查询的性能.
Fab*_*ler 13
使用子选择:
SELECT row FROM table WHERE id=(
SELECT max(id) FROM table
)
Run Code Online (Sandbox Code Playgroud)
注意:ID必须是唯一的,否则返回多行
某些 Mysql 版本不允许在子选择中使用“限制”。我对你(以及未来的我)的回答是使用组
select firstName,Lastname,id
where {whatever}
group by id
having max(id)
Run Code Online (Sandbox Code Playgroud)
这允许您在选择区域中返回任何您想要的内容,而无需聚合字段。
SELECT firstName, Lastname, MAX(id) as max WHERE YOUR_CONDITIONS_HERE HAVING id=max(id)
Run Code Online (Sandbox Code Playgroud)
blu*_*zcz -3
您正在使用单词“max”作为列的别名。尝试:
MAX(id) as mymax ... WHERE ID - mymax
Run Code Online (Sandbox Code Playgroud)