选择所有年龄最大的人?

时间:2012-06-20 07:49:04

标签: mysql sql max

我想从具有最大特定值的行中获取值(在此示例中,是最旧的成员)

Select * from members where age=max(age)

这会有用吗?

如果有超过1名同龄人年龄相同的会员会怎么样?

(我不必担心因为我使用auto_increment,但我只是好奇)

感谢。

6 个答案:

答案 0 :(得分:3)

select * 
from members 
where age = (select max(age) as max_age from members);

如果有超过1个成员具有相同的最大年龄,您将获得多个结果。从中选择一个:

select * 
from members 
where age = (select max(age) as max_age from members);
limit 1

如果您偏好任意特定数据,则可以选择添加order by

答案 1 :(得分:2)

没有

你想要

 Select * from Members 
 where Age = (Select Max(Age) from Members)

如果您提到自动增量,建议您在表格中查找最后插入的ID,那么

 Select LAST_INSERT_ID()

答案 2 :(得分:2)

这不起作用,因为这是Invalid use of group function,最好使用SELECT * FROM members ORDER BY age DESC LIMIT 1

答案 3 :(得分:1)

如果您使用 GROUP BY @variable 来查找和存储最小值,则可以使用单个 SELECT 语句完成/ max值和过滤器与最后的 HAVING 匹配。

假设您有一个表成员且至少有两列: id 年龄,那么您可以使用以下语句:< / p>

SELECT id, age, @max:= IF(@max > age, @max, age) FROM members GROUP BY id HAVING(age = @max);

SELECT id, age, @min:= IF(@min < age, @min, age) FROM members GROUP BY id HAVING(age = @min);

答案 4 :(得分:0)

这将只返回一行 - 即使多个成员具有相同的最大年龄:

SELECT *
FROM members
ORDER BY age DESC
LIMIT 1 ;

这(和@ podiluska的回答)将返回所有这些:

SELECT m.*
FROM members AS m
  JOIN
    ( SELECT MAX(age) AS max_age
      FROM members
    ) AS allm
    ON allm.max_age = m.age ;

答案 5 :(得分:0)

还有一种更为人为的做法:

SELECT * FROM members m
WHERE NOT EXISTS (
    SELECT 1 FROM members m2
    WHERE m1.age < m2.age )

此查询可移植到大多数数据库,适用于自动增加PK以及具有相同年龄的多个人。另外,至少在SQL Server中,大多数时候都会比使用子查询的版本更快(特别是如果[members]的索引超过了列[age])。