我创建了下表。
create table man(id integer, name varchar(20), city varchar(20), age integer)
我想找到年龄最大的人的姓名。
所以,我运行了以下查询,
select name, max(age) from man group by name;
以年龄的升序显示所有人的姓名。出了什么问题?
答案 0 :(得分:2)
如果您想获得年龄较大的人,您可以:
select name, age from man order by age desc limit 1;
对于使用SQL Server的查询:
select top 1 name, age from man order by age desc;
您的查询正在执行其他操作。 max
使用您的group
子句进行计算。由于您按名称进行分组,max(age)
是具有相同名称的人的最大年龄。
答案 1 :(得分:1)
我很难理解你在这里做了什么。一个人在你的模特中可以有多个年龄?
反正。如果您想要表man
中的最大年龄,则需要运行:
select max(age) from man
现在是谁?如果你向查询添加name
,数据库引擎将返回所有名称(因为你要求所有这些名称,而不是特定的名称;分组将无助于因为大多数名称已经令人不安)与最大值相结合。 age
列的值。
您需要的是子查询:
select m1.name
from man m1
where m1.age = (
select max(m2.age)
from man m2
)
这将选择年龄与集合中最高年龄相同的所有元素。
答案 2 :(得分:0)
对于每个名称,它为您提供具有该名称的所有人的最大年龄。 (这就是你要求的,不是吗?)
答案 3 :(得分:0)
选择名称。最大(年龄)来自男人的名字;
应该是
SELECT name,max(age)FROM man GROUP BY name;
您也可以尝试
SELECT name,age FROM man ORDER BY age DESC
也许有关您期望的结果的更多信息会有所帮助吗?
答案 4 :(得分:0)
SELECT NAME, AGE
FROM MAN
GROUP BY NAME, AGE
HAVING AGE = (SELECT MAX (AGE) FROM MAN)