在同一个表中使用group by查找最大值和最小值

时间:2014-04-15 09:55:31

标签: mysql database

我有下表。

name       gender   age
 NAME1  F   21
 NAME2  M   23
 NAME3  F   26
 NAME4  F   42
 NAME5  M   52

现在我想展示包括性别和最大老年人在内的年龄较小的人,包括性别。

那是

 NAME1 F 21 NAME5 M 52

我使用了以下查询。但是我没有给出正确的结果。

select max(v1.age),v1.gender, min(v2.age),v2.gender from table_name v1
,table_name v2 where v1.id =v2.id;

提前致谢...

4 个答案:

答案 0 :(得分:0)

以下是最大值的查询:

select name, gender, age 
from table_name 
where age = (select max(age) from table_name) 
limit 1

返回最大和最小名称等是可行的,但可能比运行2个查询更复杂。

答案 1 :(得分:0)

试试这个:

SELECT NAME, gender, age 
FROM t1 
WHERE age = (SELECT MAX(age) FROM t1) 
UNION
SELECT NAME, gender, age 
FROM t1 
WHERE age = (SELECT MIN(age) FROM t1) 

答案 2 :(得分:0)

您可以通过三重自联接和一个条款实现此目的:

SELECT 
    min(tmin.age) as min_age,
    t1.*,
    max(tmax.age) as max_age,
    t2.*
from myTable t1
join myTable tmin
join myTable t2
join myTable tmax
group by t1.id, t2.id
having min_age = t1.age and max_age = t2.age

虽然这是你在没有子查询的情况下获得它的唯一方法,但它感觉相当hacky。是的,最大和最小年龄将出现两次:)

答案 3 :(得分:0)

尝试此查询:

select v1.age, v1.gender, v2.age, v2.gender from table_name v1, table_name v2 where v1.age =(select max(age) from table_name) and v2.age=(select min(age) from table_name)