> 데이터 베이스 > MySQL 튜토리얼 > `crosstab()`을 사용하여 PostgreSQL에서 동적 피벗 테이블을 효율적으로 생성하려면 어떻게 해야 합니까?

`crosstab()`을 사용하여 PostgreSQL에서 동적 피벗 테이블을 효율적으로 생성하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-20 22:51:09
원래의
763명이 탐색했습니다.

How Can I Efficiently Create Dynamic Pivot Tables in PostgreSQL Using `crosstab()`?

CASE 및 GROUP BY 문을 사용하여 동적 피벗 테이블을 구현하는 보다 효율적인 방법

기사에 제공된 쿼리와 비교하면 tablefunc 확장에서 crosstab() 기능을 사용하는 것이 더 효율적인 대안입니다.

설치:

먼저 tablefunc 확장 프로그램을 아직 설치하지 않았다면 설치하세요.

<code class="language-sql">CREATE EXTENSION tablefunc;</code>
로그인 후 복사

기본 크로스탭 솔루션:

이 시나리오에 대한 간단한 crosstab 솔루션:

<code class="language-sql">SELECT * FROM crosstab(
  'SELECT bar, 1 AS cat, feh
   FROM tbl_org
   ORDER BY bar, feh')
AS ct (bar text, val1 int, val2 int, val3 int);</code>
로그인 후 복사

종합 카테고리 열:

실제 카테고리 열이 없는 경우 창 기능을 사용하여 합성 카테고리 열을 생성할 수 있습니다.

<code class="language-sql">SELECT * FROM crosstab(
   $$
   SELECT bar, val, feh
   FROM  (
      SELECT *, 'val' || row_number() OVER (PARTITION BY bar ORDER BY feh) AS val
      FROM tbl_org
      ) x
   ORDER BY 1, 2
   $$
 , $$VALUES ('val1'), ('val2'), ('val3')$$
) AS ct (bar text, val1 int, val2 int, val3 int);</code>
로그인 후 복사

동적 크로스탭?

plpgsql을 사용하여 완전히 동적인 crosstab을 생성하는 것은 동적 반환 유형의 제한으로 인해 어렵습니다. 다음은 더 간단한 테스트 사례 예입니다.

<code class="language-sql">SELECT * FROM crosstab('SELECT row_name, attrib, val FROM tbl ORDER BY 1,2')
AS ct (row_name text, val1 int, val2 int, val3 int);</code>
로그인 후 복사

tablefunc 모듈:

tablefunc 모듈은 단순화된 접근 방식을 제공합니다:

<code class="language-sql">SELECT * FROM crosstab1('SELECT row_name, attrib, val::text FROM tbl ORDER BY 1,2');</code>
로그인 후 복사

위 내용은 `crosstab()`을 사용하여 PostgreSQL에서 동적 피벗 테이블을 효율적으로 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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