복붙노트

[SQL] 다른 열 그룹화 다른 칼럼의 최대 값에 기초 얻기 [중복]

SQL

다른 열 그룹화 다른 칼럼의 최대 값에 기초 얻기 [중복]

나는 다른 열을 기준으로 그룹화 다른 컬럼의 최대에 따라 컬럼의 값을 얻을 싶어요.

나는이 테이블이 :

KEY NUM VAL
A   1   AB
B   1   CD
B   2   EF
C   2   GH
C   3   HI
D   1   JK
D   3   LM

그리고이 결과를 원하는 :

KEY VAL
A   AB
B   EF
C   HI
D   LM

나는 실제로 그것을 얻기 위해이 쿼리를 사용할 수 있습니다.

select KEY, VAL
from TABLE_NAME TN
where NUM = (
    select max(NUM)
    from TABLE_NAME TMP
    where TMP.KEY = TN.KEY
    )

그러나 결과를 얻기 위해 오라클 SQL에서 더 우아한 방법 (10g 이상)은 무엇입니까?

그 뒤에 이유는 실제로 여러 개의 키이며, 그것이 조금 추한 모습이다.

해결법

  1. ==============================

    1.당신은 ()이 사용 ROW_NUMBER에 접근 할 수 있습니다 :

    당신은 ()이 사용 ROW_NUMBER에 접근 할 수 있습니다 :

    select key, val
    from (select t.*, row_number() over (partition by key order by num desc) as seqnum
          from table_name t
         ) t
    where seqnum = 1;
    

    당신이 더 "우아한"는 아마 취향의 문제입니다 고려 여부.

    나는이 쿼리에서 미묘하게 다르다는 점을 지적한다. 이것은 각각의 키에 대해 하나 개의 행을 반환 보장; 당신은 여러 행을 반환 할 수 있습니다. 당신이 그 동작을 원하는 경우에, 다만 순위 () 또는 DENSE_RANK () 대신 ROW_NUMBER ()를 사용합니다.

  2. from https://stackoverflow.com/questions/32585397/get-value-based-on-max-of-a-different-column-grouped-by-another-column by cc-by-sa and MIT license