반응형
Oracle에서 각 그룹의 최대값을 얻는 방법은 무엇입니까?
이 문제에 대한 몇 가지 해결책을 찾았지만 Oracle과 함께 작동하지 않는 것 같습니다.
내가 할게요
저는 팀별로 가장 나이가 많은 사람에 대한 정보만 제시하는 뷰를 원합니다.제 출력은 다음과 같습니다.
PERSON | TEAM | AGE
Sam | 1 | 23
Michael | 2 | 21
Oracle에서는 어떻게 해야 합니까?
여기 없는 예가 있습니다.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)
하나의 방법은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
꽤 효과가 있습니다.
select * from (select person,team,age,
dense_rank() over (partition by team order by age desc) rnk)
where rnk=1;
분석 함수를 사용하면 팀당 최대 연령을 가진 모든 사용자가 반환됩니다(동일한 연령을 가진 사용자가 있는 경우 필요). 표를 한 번만 선택하므로 표를 여러 번 참조하는 다른 솔루션보다 빠릅니다.
With MaxAge as (
Select T.*, Max (Age) Over (Partition by Team) MaxAge
From Table T
)
Select Person, Team, Age From MaxAge Where Age=MaxAge
;
MySQL/MariaDB에서도 작동합니다.
언급URL : https://stackoverflow.com/questions/40941252/how-to-get-the-max-value-for-each-group-in-oracle
반응형
'IT' 카테고리의 다른 글
mysql java 프로그램에서 works를 선택, 삽입 및 삭제하지만 업데이트가 작동하지 않습니다. (0) | 2023.09.15 |
---|---|
Python에서 open과 codecs.open의 차이 (0) | 2023.09.15 |
ADO.NET을 사용하여 오라클 패키지 내 프로시저의 저장 프로시저 메타데이터 가져오기 (0) | 2023.09.15 |
urlib2HTTP 오류: HTTP 오류 403: 금지됨 (0) | 2023.09.15 |
everyauth vs passport.js? (0) | 2023.09.15 |