집 >데이터 베이스 >MySQL 튜토리얼 >Oracle SQL을 사용하여 그룹화된 데이터의 각 키에 대한 최대 VAL을 가져오는 방법은 무엇입니까?
Oracle SQL에서 각 KEY에 대해 가장 높은 VAL 추출
이 가이드는 Oracle SQL을 사용하여 그룹화된 데이터의 각 VAL
에 대한 최대 KEY
를 효율적으로 검색하는 방법을 보여줍니다. 일반적인 시나리오를 살펴보겠습니다.
TABLE_NAME
이라는 테이블에는 다음 데이터가 포함되어 있습니다.
KEY | NUM | VAL |
---|---|---|
A | 1 | AB |
B | 1 | CD |
B | 2 | EF |
C | 2 | GH |
C | 3 | HI |
D | 1 | JK |
D | 3 | LM |
목표는 각 고유 VAL
:KEY
에 대해 최대
KEY | VAL |
---|---|
A | AB |
B | EF |
C | HI |
D | LM |
효율적인 Oracle SQL 솔루션(10g 이상):
하위 쿼리로 이를 달성할 수 있지만 더 우아하고 더 빠른 솔루션은 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>
이 쿼리는 먼저 seqnum
기준으로 내림차순으로 정렬된 각 KEY
파티션 내의 각 행에 순위(NUM
)를 할당합니다. 그런 다음 seqnum = 1
이 있는 행만 포함하도록 결과를 필터링하여 가장 높은 NUM
이 있는 행을 효과적으로 선택합니다(따라서 각 내 VAL
와 NUM
사이의 일관된 관계를 가정하여 암시적으로 가장 높은 VAL
가 선택됩니다). 키).
중요 사항: 이 방법은 KEY
당 하나의 행을 보장합니다. NUM
에서 잠재적 동점을 다르게 처리해야 하는 경우(예: 여러 행이 최대값 KEY
을 공유하는 경우 NUM
에 대해 여러 행 반환) RANK()
대신 DENSE_RANK()
또는 ROW_NUMBER()
을 사용하는 것이 좋습니다.
위 내용은 Oracle SQL을 사용하여 그룹화된 데이터의 각 키에 대한 최대 VAL을 가져오는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!