我想在一组排名中找到最年轻的人的名字。一切都在表Person中,具有字段PName(various),PAge(various),PRanking(0-3)。我希望在每个排名组(0-3)中找到最年轻的人的名字。因此,如果每个组中都有一个排名较高的人,则查询将返回4个名称(每个排名中最年轻的人)。
到目前为止,我的方法是:
SELECT PName
FROM Person
WHERE PAge = MIN(PAge)
GROUPBY PRanking
答案 0 :(得分:2)
您可以加入最小年龄的子选择
select P.PName from Person P
inner join (
SELECT ranking, min(age) min_age
FROM Person
GROUP BY PRanking
) t on t.ranking = p.ranking and t.min_age = p.age
答案 1 :(得分:0)
这不是group by
问题。这是一个过滤问题。因此,请考虑where
而不是group by
:
SELECT p.*
FROM Person p
WHERE PAge = (SELECT MIN(p2.PAge) FROM Person p2 WHERE p2.PRanking = p.PRanking);
使用Person(Pranking, PAge)
上的索引,其性能可能至少与其他任何方法一样好。
答案 2 :(得分:0)
SELECT p.*
FROM Person p
WHERE p.PAge,p.Pgroup in =
(SELECT MIN(p2.PAge), p2.Pranking FROM Person P2 Group by P2.pranking);