(33个答案)三年前关闭了。我如何使用max()函数在哪里的一个mysql查询子句,我尝试:
select firstName,Lastname,MAX(id) as max where id=max;
这是给我一个错误:"where子句"中的列"max"未知
2q5ifsrm1#
我们不能在同一个SELECT的WHERE子句中引用聚合函数的结果(例如MAX())。解决这类问题的标准模式是使用内联视图,类似于:
SELECT
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的ORDERBY。(注意这个语法是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或作为另一索引中的前导列)。合适的索引将使用所有这些方法提高查询的性能。
LIMIT 5
id
mi7gmzs62#
使用子选择:
SELECT row FROM table WHERE id=( SELECT max(id) FROM table )
注意:ID必须唯一,否则返回多行
mfpqipee3#
一些Mysql版本不允许在子选择中使用“limit”。我对你(以及将来的我)的回答是使用组
select firstName,Lastname,id where {whatever} group by id having max(id)
这使您可以在选择区域中返回任何想要的内容,而无需聚合字段。
scyqe7ek4#
SELECT firstName, Lastname, MAX(id) as max WHERE YOUR_CONDITIONS_HERE HAVING id=max(id)
l0oc07j25#
是否需要ID最大的行的名字和姓氏?如果是(并且您缺少FROM子句):
SELECT firstname, lastname, id FROM foo ORDER BY id DESC LIMIT 1;
eanckbw96#
您使用的语法不正确。查询应类似于:
SELECT column_name(s) FROM tablename WHERE id = (SELECT MAX(id) FROM tablename)
wwtsj6pe7#
这个查询应该会返回你想要的数据。用你正在使用的表名替换foo。SQL查询:
select firstName,Lastname, id from foo having max(id) = id
1wnzp6jl8#
您正在使用单词“max”作为列的别名。请尝试:
MAX(id) as mymax ... WHERE ID - mymax
8条答案
按热度按时间2q5ifsrm1#
我们不能在同一个
SELECT
的WHERE
子句中引用聚合函数的结果(例如MAX()
)。解决这类问题的标准模式是使用内联视图,类似于:
这只是获得指定结果的一种方法。还有其他几种方法可以获得相同的结果,其中一些方法的效率可能会比其他方法低得多。其他答案说明了这种方法:
有时候,最简单的方法是使用带有LIMIT的ORDERBY。(注意这个语法是MySQL特有的)
请注意,这将只返回一行;因此,如果有多个行具有相同的id值,则不会返回所有行(第一个查询将返回所有具有相同id值的行)。
这种方法可以扩展为获取多行,通过将其更改为
LIMIT 5
,可以获取具有最大id值的五行。注意,这种方法的性能特别依赖于可用的合适索引(即,将
id
作为PRIMARY KEY或作为另一索引中的前导列)。合适的索引将使用所有这些方法提高查询的性能。mi7gmzs62#
使用子选择:
注意:ID必须唯一,否则返回多行
mfpqipee3#
一些Mysql版本不允许在子选择中使用“limit”。我对你(以及将来的我)的回答是使用组
这使您可以在选择区域中返回任何想要的内容,而无需聚合字段。
scyqe7ek4#
l0oc07j25#
是否需要ID最大的行的名字和姓氏?
如果是(并且您缺少FROM子句):
eanckbw96#
您使用的语法不正确。查询应类似于:
wwtsj6pe7#
这个查询应该会返回你想要的数据。用你正在使用的表名替换foo。
SQL查询:
1wnzp6jl8#
您正在使用单词“max”作为列的别名。请尝试: