> 데이터 베이스 > MySQL 튜토리얼 > PostgreSQL에서 사용자 이메일의 행 데이터를 열로 변환하는 방법은 무엇입니까?

PostgreSQL에서 사용자 이메일의 행 데이터를 열로 변환하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-10 16:02:41
원래의
446명이 탐색했습니다.

How to Transpose Row Data of User Emails into Columns in PostgreSQL?

행 데이터를 열로 변환: 사용자의 최신 이메일 주소 표시

질문:

표에 사용자당 이메일 주소가 여러 개 있고, 생성 날짜를 기준으로 각 사용자의 가장 최근 이메일 주소 3개가 표시되도록 이를 열로 병합하려고 합니다.

예상 출력:

user_name user_id email1 email2 email3
Mary 123 [email protected] [email protected] [email protected]
Joe 345 [email protected] NULL NULL

해결책:

이를 위해 PostgreSQL의 tablefunc 모듈의 crosstab() 기능을 활용할 수 있습니다.

<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 <= 3
    ORDER BY user_id, rn
    $$,
    'VALUES (1),(2),(3)'
) AS ct (user_id integer, user_name text, email1 text, email2 text, email3 text);</code>
로그인 후 복사

설명:

  • 하위 쿼리는 각 사용자의 사용자 ID, 사용자 이름, 이메일 주소 및 서수를 검색합니다. row_number() 함수는 각 사용자의 메일함 순서를 결정하는 데 사용됩니다. 여기서 NULLS LAST는 NULL 값이 최신 값으로 간주되도록 보장합니다.
  • 그런 다음 crosstab() 함수는 행 번호를 키로 사용하여 사서함을 열로 바꿉니다. crosstab()의 두 번째 매개변수 "VALUES (1),(2),(3)"은 생성할 세 개의 열을 지정합니다.
  • 마지막 SELECT 문은 각 사용자의 가장 최근 사서함 3개가 email1, email2 및 email3 열에 표시되는 전치된 데이터를 반환합니다.

참고:

  • 각 사용자의 사서함 수가 다른 경우 "VALUES (1),(2),(3)"을 가능한 모든 키 값 목록으로 바꿀 수 있습니다.
  • NULL 값이 최신 값으로 처리되도록 ORDER BY 절에 NULLS LAST를 사용하는 것에 유의하세요.

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

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