where子句mysql中的MAX函数[重复]
Posted
技术标签:
【中文标题】where子句mysql中的MAX函数[重复]【英文标题】:MAX function in where clause mysql [duplicate] 【发布时间】:2014-04-27 14:41:12 【问题描述】:如何在 mysql 查询的 where 子句中使用 max() 函数,我正在尝试:
select firstName,Lastname,MAX(id) as max where id=max;
这给了我一个错误:
Unknown column 'max' in 'where clause'
有什么帮助吗?提前致谢。
【问题讨论】:
您应该接受 spencer7593 为您的问题提供的答案 这个问题还没有解决吗?不接受任何答案。如果没有一个答案是令人满意的,那么也许这个问题应该作为另一个已接受答案的问题的副本关闭。 【参考方案1】:我们不能在同一 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 的 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 或作为另一个索引中的前导列。)合适的索引将提高使用所有这些的查询的性能接近。
【讨论】:
【参考方案2】:使用子选择:
SELECT row FROM table WHERE id=(
SELECT max(id) FROM table
)
注意:ID必须唯一,否则返回多行
【讨论】:
【参考方案3】:某些 Mysql 版本不允许在子选择中使用“限制”。 我对你(以及未来的我)的回答是使用群组
select firstName,Lastname,id
where whatever
group by id
having max(id)
这允许您在选择区域中返回您想要的任何内容,而无需聚合字段。
【讨论】:
如果我在一个月或 6 年前看到这个就好了。简单,有效。喜欢它! 如果所有内容都使用 group by 进行排序,我们应该在哪里输入什么...... 记住having
子句过滤了临时的结果集【参考方案4】:
SELECT firstName, Lastname, MAX(id) as max WHERE YOUR_CONDITIONS_HERE HAVING id=max(id)
【讨论】:
【参考方案5】:你想要最大 id 行的名字和姓氏吗?
如果是这样(并且您缺少 FROM 子句):
SELECT firstname, lastname, id
FROM foo
ORDER BY id DESC
LIMIT 1;
【讨论】:
【参考方案6】:您使用的语法不正确。查询应该是这样的:
SELECT column_name(s) FROM tablename WHERE id = (SELECT MAX(id) FROM tablename)
【讨论】:
【参考方案7】:此查询应该会返回您想要的数据。 将 foo 替换为您正在使用的表名。
SQL 查询:
select firstName,Lastname, id
from foo
having max(id) = id
【讨论】:
【参考方案8】:您正在使用单词“max”作为列的别名。尝试:
MAX(id) as mymax ... WHERE ID - mymax
【讨论】:
-1 不能在 WHERE 子句中引用列别名,也不能在 WHERE 子句中引用聚合函数的结果。这个答案是完全错误的。 此答案中的第一句话是正确的,即max
用作选择列表中表达式的别名。但根据这一观察,答案没有任何意义。首先,MAX
不是保留字参考:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html。使用不同的别名有什么意义?它没有解决问题。以上是关于where子句mysql中的MAX函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
有一个 mySQL 错误,未知列 where 子句 [重复]