> 데이터 베이스 > MySQL 튜토리얼 > SQL의 crosstab() 함수를 사용하여 여러 열의 데이터를 피벗하는 방법은 무엇입니까?

SQL의 crosstab() 함수를 사용하여 여러 열의 데이터를 피벗하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-14 09:57:43
원래의
683명이 탐색했습니다.

How to Pivot Data on Multiple Columns using SQL's crosstab() Function?

Tablefunc을 사용하여 다중 열 데이터 피벗 구현

SQL의 crosstab() 함수는 긴 형식 데이터를 와이드 형식 데이터로 변환하는 데 자주 사용됩니다. 그러나 일반적으로 행 이름과 값 열을 제외한 열은 행 이름이 동일한 모든 행에 대해 동일하다고 가정합니다. 이러한 제한은 가변 추가 열이 있는 데이터 세트로 작업할 때 문제를 일으킬 수 있습니다.

다변량 피벗을 처리하는 한 가지 방법은 행 이름 열과 필요한 추가 열이 있는 임시 테이블을 만드는 것입니다. 그런 다음 crosstab() 함수를 사용하여 행 이름 열을 기본 그룹화 열로 사용하고 추가 열을 추가 그룹화 열로 사용하여 데이터를 피벗합니다.

예를 들어 다음 샘플 데이터를 고려해 보세요.

<code class="language-sql">CREATE TEMP TABLE t4 (
  timeof   timestamp
 ,entity    character
 ,status    integer
 ,ct        integer);

INSERT INTO t4 VALUES 
  ('2012-01-01', 'a', 1, 1)
 ,('2012-01-01', 'a', 0, 2)
 ,('2012-01-02', 'b', 1, 3)
 ,('2012-01-02', 'c', 0, 4);</code>
로그인 후 복사

여러 변수를 사용하여 이 데이터를 피벗하려면 다음 쿼리를 사용할 수 있습니다.

<code class="language-sql">SELECT *
FROM   crosstab(
   'SELECT entity, timeof, status, ct
    FROM   t4
    ORDER  BY 1, 2, 3'
 ,$$VALUES (1), (0)$$)
 AS ct ("Attribute" character, "Section" timestamp, "status_1" int, "status_0" int);</code>
로그인 후 복사

이 쿼리는 entitytimeof 열을 기준으로 데이터를 그룹화한 다음 statusct 열을 추가 열로 피벗합니다. 생성된 테이블의 형식은 다음과 같습니다.

<code>Section | Attribute | status_1 | status_0
2012-01-01 00:00:00 | a         | 1         | 2
2012-01-02 00:00:00 | b         | 3         |
2012-01-02 00:00:00 | c         |           | 4</code>
로그인 후 복사

보시다시피 이제 추가 열Attribute이 별도의 열로 표시되므로 특정 시간에 각 항목에 대해 측정한 다양한 측정값을 쉽게 비교할 수 있습니다.

요약하면 임시 테이블과 함께 crosstab() 함수를 사용하면 다변량 피벗을 위한 효율적이고 맞춤화된 방법을 제공할 수 있습니다. 열의 순서를 제어하면 행 이름, 추가 열, 범주 열 및 값 열로 간주되는 열을 결정할 수 있습니다.

위 내용은 SQL의 crosstab() 함수를 사용하여 여러 열의 데이터를 피벗하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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