2016-12-02 3 views
0

Я нашел некоторые решения для этой проблемы, однако они, похоже, не работают с Oracle.Как получить максимальное значение для каждой группы в Oracle?

Я получил это:

enter image description here

Я хочу посмотреть, чтобы представить только информацию о старейшем человеке для каждой команды. Итак, мой вывод должен быть примерно таким:

PERSON | TEAM | AGE 
Sam  | 1 | 23 
Michael | 2 | 21 

Как я могу это сделать в Oracle?

ответ

2

Один метод использует keep:

select team, max(age) as age, 
     max(person) keep (dense_rank first order by age desc) as person 
from t 
group by team; 

Существуют и другие методы, но в моем опыте, keep работает достаточно хорошо.

+0

Этот метод работает, но есть ли более простой способ? Учителя никогда не учили нас «держать» – ItsLavishBitch

+0

Я считаю это простейшим методом из всех ответов, которые вы видите здесь. Однако [FIRST] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions056.htm) не так широко известен. –

2

Вот пример без keep но с row_number():

with t0 as 
(
    select person, team, age, 
    row_number() over(partition by team order by age desc) as rn 
    from t 
) 
select person, team, age 
from t0 
where rn = 1; 
0
select * from table 
where (team, age) in (select team, max(age) from table group by team)