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】:

我们不能在同一 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 的 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 子句 [重复]

在oracle中where 子句和having子句中的区别

如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]

SQLite 中 WHERE 子句中的聚合函数

mysql查询的where子句中的正则表达式或替换函数

sql WHERE子句中的MAX()