我想从具有最大特定值的行中获取值(在本例中,最旧的成员)
Select * from members where age=max(age)
这行得通吗?
如果有超过 1 个年龄最大的成员同龄,会发生什么?
(我不必担心,因为我使用 auto_increment,但我只是好奇)
谢谢。
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
如果您喜欢任何特定数据而不是随机数据,则可以选择添加一个。
不。
你要
Select * from Members
where Age = (Select Max(Age) from Members)
如果按照您提到的自动增量的建议,您正在查找表中最后插入的 ID,您想要
Select LAST_INSERT_ID()
这不起作用,因为这是Invalid use of group function
更好的使用SELECT * FROM members ORDER BY age DESC LIMIT 1
如果您使用GROUP BY和@variable来查找和存储什么是最小/最大值并过滤匹配最后的HAVING ,则可以使用单个SELECT语句来完成。
假设您有一个至少包含两列的表成员: id和age,那么您可以使用如下语句:
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);
这将只返回一行 - 即使多个成员具有相同的最大年龄:
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 ;
还有一种更人为的方式来做同样的事情:
SELECT * FROM members m
WHERE NOT EXISTS (
SELECT 1 FROM members m2
WHERE m1.age < m2.age )
此查询可移植到大多数数据库,适用于自动增加的 PK,也适用于具有相同年龄的多人。另外,至少在 SQL Server 中,大多数情况下会比使用子查询的版本更快(尤其是如果 [members] 在 [age] 列上有索引)。