>데이터 베이스 >MySQL 튜토리얼 >큰 테이블의 각 그룹에 대한 열의 최대값을 효율적으로 찾으려면 어떻게 해야 합니까?

큰 테이블의 각 그룹에 대한 열의 최대값을 효율적으로 찾으려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-21 08:12:10444검색

How Can I Efficiently Find the Maximum Value in a Column for Each Group in a Large Table?

큰 테이블의 그룹화된 열에서 최대값 찾기

이 예에서는 비효율적인 다중 테이블 검색을 수행하지 않고 큰 테이블의 각 그룹에서 특정 열의 최대값을 갖는 행을 추출해야 합니다. 다음 형식을 고려하세요.

<code>SCORES
ID    ROUND    SCORE
1     1        3
1     2        6
1     3        2
2     1        10
2     2        12
3     1        6</code>

귀하의 목표는 각 고유 ID의 최신 라운드와 해당 점수를 검색하는 것입니다. 원하는 출력은 다음과 같습니다.

<code>ID   ROUND   SCORE
1    2       6
2    2       12
3    1       6</code>

창 기능을 활용한 효율적인 솔루션

효율적인 방법은 DISTINCT 키워드와 함께 창 기능을 사용하는 것입니다.

<code class="language-sql">SELECT DISTINCT
       id
      ,MAX(round) OVER (PARTITION BY id) AS round
      ,FIRST_VALUE(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM   SCORES
WHERE  id IN (1,2,3)
ORDER  BY id;</code>

이 쿼리는 다음 주요 개념을 사용합니다.

  • PARTITION BY: ID 열을 기준으로 행을 그룹화합니다.
  • MAX(round): 각 파티션의 최대 라운드 수를 계산합니다.
  • FIRST_VALUE(점수): 최대 라운드 수를 사용하여 각 ID의 첫 번째(최신) 점수를 검색합니다.
  • DISTINCT: 중복된 결과를 제거하고 고유한 행만 반환되도록 합니다.

이 최적화된 쿼리는 테이블을 여러 번 스캔할 필요 없이 각 고유 ID에 대한 최신 라운드와 점수를 효율적으로 반환하므로 대규모 테이블의 경우에도 효율성이 유지됩니다.

위 내용은 큰 테이블의 각 그룹에 대한 열의 최대값을 효율적으로 찾으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.