>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL의 가장 최근 사용자 이메일 3개를 열로 변환하는 방법은 무엇입니까?

PostgreSQL의 가장 최근 사용자 이메일 3개를 열로 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-10 16:48:42959검색

How to Transpose the Three Most Recent User Emails into Columns in PostgreSQL?

crosstab()을 사용하여 PostgreSQL에서 최근 사용자 이메일 피벗

과제: 여러 사용자 이메일이 포함된 표를 각 사용자의 가장 최근 이메일 3개가 별도의 열로 표시되는 형식으로 변환해야 합니다.

해결책: PostgreSQL의 crosstab() 함수(tablefunc 확장에 있음)는 효율적인 솔루션을 제공합니다. 이 접근 방식에는 다음과 같은 주요 단계가 포함됩니다.

<code class="language-sql">SELECT * FROM crosstab(
   $$SELECT user_id, user_name, rn, email_address
     FROM  (
        SELECT u.user_id, u.user_name, e.email_address
             , row_number() OVER (PARTITION BY u.user_id
                            ORDER BY e.creation_date DESC NULLS LAST) AS rn
        FROM   usr u
        LEFT   JOIN email_tbl e USING (user_id)
        ) sub
     WHERE  rn < 4
     ORDER  BY user_id
   $$
  , 'VALUES (1),(2),(3)'
   ) AS t (user_id int, user_name text, email1 text, email2 text, email3 text);</code>

분류:

  1. 하위 쿼리: 하위 쿼리는 creation_date을 사용하여 ROW_NUMBER()을 기준으로 각 사용자의 이메일 순위를 매깁니다. NULLS LAST NULL 생성 날짜가 적절하게 처리되도록 보장합니다.

  2. 필터링: WHERE rn < 4 절은 결과를 사용자당 가장 최근 이메일 3개로 제한합니다.

  3. crosstab() 기능: crosstab() 기능은 순위가 매겨진 이메일 데이터를 중심으로 합니다. VALUES (1),(2),(3) 매개변수는 세 개의 출력 열(email1, email2, email3)을 정의합니다.

  4. 출력: 최종 쿼리는 user_id, user_name 및 최신 이메일 주소 3개가 별도의 열로 포함된 테이블을 반환합니다.

이 방법은 전치를 효율적으로 처리하여 최신 이메일 데이터를 추출하기 위한 명확하고 간결한 솔루션을 제공합니다. PostgreSQL 데이터베이스에서 아직 활성화되지 않은 경우 tablefunc 확장을 활성화해야 합니다.

위 내용은 PostgreSQL의 가장 최근 사용자 이메일 3개를 열로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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