집 >데이터 베이스 >MySQL 튜토리얼 >Oracle SQL의 그룹 내 최대 열 값과 연관된 값을 효율적으로 검색하는 방법은 무엇입니까?
Oracle SQL: 그룹 내 최대 열 값에 연결된 값 추출
일반적인 데이터베이스 작업에는 특히 그룹화된 데이터를 처리할 때 열의 최대값과 연관된 값을 선택하는 작업이 포함됩니다. KEY
, NUM
및 VAL
:
KEY | NUM | VAL |
---|---|---|
A | 1 | AB |
B | 1 | CD |
B | 2 | EF |
C | 2 | GH |
C | 3 | HI |
D | 1 | JK |
D | 3 | LM |
목표는 각 NUM
및 해당 KEY
에 대한 최대 VAL
를 찾는 것입니다. 원하는 출력:
KEY | VAL |
---|---|
A | AB |
B | EF |
C | HI |
D | LM |
하위 쿼리를 사용하는 한 가지 방법은 다음과 같습니다.
<code class="language-sql">select KEY, VAL from TABLE_NAME TN where NUM = ( select max(NUM) from TABLE_NAME TMP where TMP.KEY = TN.KEY );</code>
그러나 보다 효율적이고 읽기 쉬운 접근 방식은 ROW_NUMBER()
기능을 사용하는 것입니다.
<code class="language-sql">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;</code>
내림차순 KEY
값을 기준으로 각 NUM
그룹 내에서 순위를 할당합니다. 그런 다음 WHERE
절은 최상위 순위(seqnum = 1
)를 필터링하여 원하는 결과를 산출합니다.
KEY | VAL |
---|---|
A | AB |
B | EF |
C | HI |
D | LM |
두 방법 모두 동일한 결과를 달성하지만 ROW_NUMBER()
접근 방식은 일반적으로 특히 대규모 데이터 세트에서 더 나은 성능과 명확성을 제공합니다. 최적의 선택은 특정 요구사항과 선호도에 따라 다르지만 ROW_NUMBER()
은 이러한 일반적인 SQL 문제에 대해 강력하고 우아한 솔루션을 제공합니다.
위 내용은 Oracle SQL의 그룹 내 최대 열 값과 연관된 값을 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!