2016-12-02 38 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

下面是一個例子,而不keeprow_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) 
相關問題