집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL의 가장 최근 사용자 이메일 3개를 열로 변환하는 방법은 무엇입니까?
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>
분류:
하위 쿼리: 하위 쿼리는 creation_date
을 사용하여 ROW_NUMBER()
을 기준으로 각 사용자의 이메일 순위를 매깁니다. NULLS LAST
NULL 생성 날짜가 적절하게 처리되도록 보장합니다.
필터링: WHERE rn < 4
절은 결과를 사용자당 가장 최근 이메일 3개로 제한합니다.
crosstab()
기능: crosstab()
기능은 순위가 매겨진 이메일 데이터를 중심으로 합니다. VALUES (1),(2),(3)
매개변수는 세 개의 출력 열(email1
, email2
, email3
)을 정의합니다.
출력: 최종 쿼리는 user_id
, user_name
및 최신 이메일 주소 3개가 별도의 열로 포함된 테이블을 반환합니다.
이 방법은 전치를 효율적으로 처리하여 최신 이메일 데이터를 추출하기 위한 명확하고 간결한 솔루션을 제공합니다. PostgreSQL 데이터베이스에서 아직 활성화되지 않은 경우 tablefunc
확장을 활성화해야 합니다.
위 내용은 PostgreSQL의 가장 최근 사용자 이메일 3개를 열로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!