where子句mysql中的MAX函数[重复]

rdrgkggo  于 2023-02-28  发布在  Mysql
关注(0)|答案(8)|浏览(221)
    • 此问题在此处已有答案**:

(33个答案)
三年前关闭了。
我如何使用max()函数在哪里的一个mysql查询子句,我尝试:

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

这是给我一个错误:
"where子句"中的列"max"未知

2q5ifsrm

2q5ifsrm1#

我们不能在同一个SELECTWHERE子句中引用聚合函数的结果(例如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或作为另一索引中的前导列)。合适的索引将使用所有这些方法提高查询的性能。

mi7gmzs6

mi7gmzs62#

使用子选择:

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

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

mfpqipee

mfpqipee3#

一些Mysql版本不允许在子选择中使用“limit”。我对你(以及将来的我)的回答是使用组

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

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

scyqe7ek

scyqe7ek4#

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

l0oc07j25#

是否需要ID最大的行的名字和姓氏?
如果是(并且您缺少FROM子句):

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

eanckbw96#

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

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

wwtsj6pe7#

这个查询应该会返回你想要的数据。用你正在使用的表名替换foo。
SQL查询:

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

1wnzp6jl8#

您正在使用单词“max”作为列的别名。请尝试:

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

相关问题