Найти значение на основе минимума в группе SQL - PullRequest
0 голосов
/ 17 сентября 2018

Я хочу найти имена самого молодого человека в группе рейтинга. Все в таблице Person, с полями PName (разные), PAge (разные), PRanking (0-3). Я хочу найти имя самого молодого человека в каждой рейтинговой группе (0-3). Поэтому, если в каждой группе есть человек с рейтингом, запрос выдаст 4 имени (самый молодой человек в каждом рейтинге).

Мой подход пока таков:

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

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Вы можете присоединиться к отбору для минимального возраста

   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
0 голосов
/ 17 сентября 2018
SELECT p.* 
FROM Person p 
WHERE p.PAge,p.Pgroup in =
  (SELECT MIN(p2.PAge), p2.Pranking FROM Person P2 Group by P2.pranking);
0 голосов
/ 17 сентября 2018

Это не проблема 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), производительность, скорее всего, будет ниже, чем у любого другого метода.

...