我發現了一些針對此問題的解決方案,但是,它們似乎不適用於Oracle。如何獲得Oracle中每個組的最大值?
我得到這個:
我想以目前大約只有年齡最大的人每隊的信息。所以,我的輸出應該是這樣的:
PERSON | TEAM | AGE
Sam | 1 | 23
Michael | 2 | 21
我怎麼能在Oracle中做到這一點?
我發現了一些針對此問題的解決方案,但是,它們似乎不適用於Oracle。如何獲得Oracle中每個組的最大值?
我得到這個:
我想以目前大約只有年齡最大的人每隊的信息。所以,我的輸出應該是這樣的:
PERSON | TEAM | AGE
Sam | 1 | 23
Michael | 2 | 21
我怎麼能在Oracle中做到這一點?
一種方法是使用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
工作得很好。
下面是一個例子,而不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;
select * from table
where (team, age) in (select team, max(age) from table group by team)
這種方法有效,但是有沒有更簡單的方法?老師從來沒有教過我們「保持」 – ItsLavishBitch
我認爲這是從你在這裏看到的所有答案中最簡單的方法。然而[FIRST](https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions056.htm)並不是那種衆所周知的。 –