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 중국어 웹사이트의 기타 관련 기사를 참조하세요!