> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL에서 각 그룹의 가장 빠른 항목을 검색하는 방법은 무엇입니까?

PostgreSQL에서 각 그룹의 가장 빠른 항목을 검색하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-25 20:11:11
원래의
698명이 탐색했습니다.

How to Retrieve the Earliest Entry for Each Group in PostgreSQL?

PostgreSQL에서 각 그룹의 첫 번째 행을 효율적으로 선택

이 가이드에서는 그룹화된 데이터 작업 시 일반적인 작업인 PostgreSQL에서 각 그룹의 가장 빠른 항목을 효율적으로 검색하는 방법을 보여줍니다. 가장 효과적인 방법은 DISTINCT ON 절을 활용하는 것입니다.

DISTINCT ON 조항 활용

PostgreSQL의 DISTINCT ON 절은 지정된 열로 정의된 각 그룹에서 첫 번째 행을 선택하는 간결하고 효율적인 방법을 제공합니다. 구문은 간단합니다.

<code class="language-sql">SELECT DISTINCT ON (column_list)
FROM table_name
ORDER BY column_list, ...;</code>
로그인 후 복사

예: 각 고객의 첫 번째 구매 식별

purchases, idcustomer 열이 있는 total 테이블을 생각해 보세요. 총액이 가장 높은 각 고객의 가장 빠른 구매(id 열 기준)를 찾으려면 다음 쿼리를 사용하세요.

<code class="language-sql">SELECT DISTINCT ON (customer)
       id, customer, total
FROM   purchases
ORDER  BY customer, total DESC, id;</code>
로그인 후 복사

중요 고려 사항:

  • NULL 처리: total 열이 NULL 값을 허용하는 경우 NULLS LAST 절에 ORDER BY을 포함하여 NULL이 아닌 값이 우선순위를 갖도록 하세요.
  • SELECT 목록 유연성: SELECT 목록은 DISTINCT ON 또는 ORDER BY의 열로 제한되지 않습니다.
  • PostgreSQL 특이성: DISTINCT ON은 PostgreSQL 전용 확장이며 표준 SQL의 일부가 아닙니다.
  • 대체 순서 지정: 그룹화 순서와 다르게 최종 결과를 정렬하려면 쿼리를 중첩하고 보조 ORDER BY 절을 적용하세요.

인덱싱을 통한 성능 최적화:

(customer, total DESC, id)에 다중 열 인덱스를 생성하면 특히 고객당 행 수가 상대적으로 적은 경우 쿼리 성능이 크게 향상됩니다.

대규모 데이터 세트를 위한 대체 접근 방식:

고객당 행 수가 많은 데이터 세트의 경우 대체 전략이 더 효율적일 수 있습니다.

  • 하위 쿼리: 하위 쿼리 또는 상관 하위 쿼리를 사용하여 각 고객에 대한 최대 total를 찾은 다음 해당 고객에 대해 최소 id가 있는 행을 선택합니다.
  • 임시 테이블/CTE: 고유한 고객이 포함된 임시 테이블 또는 CTE(공용 테이블 표현식)를 생성하고 이를 원본 테이블과 조인하여 원하는 행을 검색합니다. 이 접근 방식은 복잡한 시나리오에 유용할 수 있습니다.

위 내용은 PostgreSQL에서 각 그룹의 가장 빠른 항목을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿