>데이터 베이스 >MySQL 튜토리얼 >데이터베이스에서 그룹당 최고 또는 최저 레코드를 효율적으로 검색하려면 어떻게 해야 합니까?

데이터베이스에서 그룹당 최고 또는 최저 레코드를 효율적으로 검색하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-24 22:08:11583검색

How Can I Efficiently Retrieve the Highest or Lowest Record per Group in a Database?

그룹당 최고/최저 기록 검색

문제 설명

최고 기록을 효율적으로 검색하는 방법 또는 다른 그룹에 의해 정의된 각 그룹 내의 특정 필드에 대한 가장 낮은 값 field?

왼쪽 외부 조인을 사용한 솔루션

각 GroupId 내의 OrderField 필드에 대해 가장 높은 값을 가진 레코드를 검색하려면 다음 쿼리를 사용합니다.

SELECT t1.*
FROM `Table` AS t1
LEFT OUTER JOIN `Table` AS t2
  ON t1.GroupId = t2.GroupId AND t1.OrderField < t2.OrderField
WHERE t2.GroupId IS NULL
ORDER BY t1.OrderField;

가입 혜택 접근 방식

  • 대규모 데이터 세트에 효율적
  • 가능한 경우 (GroupId, OrderField)에 대한 인덱스 사용
  • 쿼리

대안

데이터가 작거나 사용 중인 데이터베이스 엔진의 특정 구현이 조인에 대해 제대로 최적화되지 않은 경우 다음과 같은 대안을 고려할 수 있습니다. as:

  • 하위 쿼리 사용: 이 하위 쿼리를 사용하여 각 그룹의 최대값을 계산한 다음 이 하위 쿼리를 기본 테이블에 결합하여 해당 레코드를 검색합니다.
  • 순위 함수 사용: 여기에는 창 함수를 사용하여 각 그룹 내 각 레코드의 순위를 계산한 후 순위를 기준으로 필터링합니다.

방법 사용의 비효율성 @Rank 변수

@Rank 변수를 사용하여 설명한 방법은 원래 작성된 대로 @Rank 변수가 첫 번째 테이블을 처리한 후 0으로 재설정되지 않기 때문에 올바르게 작동하지 않습니다. 이 문제를 해결하려면 두 번째 테이블을 처리하기 전에 다른 파생 테이블을 추가하여 @Rank를 0으로 재설정해야 합니다. 그러나 이 접근 방식은 조인 접근 방식에 비해 여전히 비효율적입니다.

위 내용은 데이터베이스에서 그룹당 최고 또는 최저 레코드를 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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