根据组SQL中的最小值查找值

时间:2018-09-17 10:57:21

标签: sql greatest-n-per-group

我想在一组排名中找到最年轻的人的名字。一切都在表Person中,具有字段PName(various),PAge(various),PRanking(0-3)。我希望在每个排名组(0-3)中找到最年轻的人的名字。因此,如果每个组中都有一个排名较高的人,则查询将返回4个名称(每个排名中最年轻的人)。

到目前为止,我的方法是:

SELECT PName
FROM Person
WHERE PAge = MIN(PAge)
GROUPBY PRanking

3 个答案:

答案 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);