>데이터 베이스 >MySQL 튜토리얼 >UNION ALL 및 집계를 사용하여 MySQL에서 피벗 테이블을 시뮬레이션하는 방법은 무엇입니까?

UNION ALL 및 집계를 사용하여 MySQL에서 피벗 테이블을 시뮬레이션하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-09 15:16:42151검색

How to Simulate Pivot Tables in MySQL Using UNION ALL and Aggregation?

MySQL에서 피벗 테이블 시뮬레이션: UNION ALL 및 집계 함수 사용

피벗 테이블은 데이터 분석 및 보고서 생성에서 핵심적인 역할을 하며, 열 형식 데이터를 행 기반 데이터로 변환하여 더욱 간결하고 통찰력 있는 시각화를 구현합니다. MySQL은 UNPIVOT 및 PIVOT 함수를 직접 제공하지 않지만 UNION ALL 및 집계 함수를 교묘하게 결합하여 유사한 기능을 구현할 수 있습니다.

데이터 피벗 해제

피벗 테이블의 첫 번째 단계는 데이터를 확장하거나 보다 유연한 형식으로 변환하는 것입니다. 여기에는 데이터의 각 열에 대해 여러 행을 만드는 작업이 포함됩니다. 여기서 각 행은 열과 해당 값을 나타냅니다. 이를 달성하기 위해 UNION ALL 연산자를 사용할 수 있습니다:

<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col2 AS value, 'col2' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col3 AS value, 'col3' AS descrip
FROM yourTable
UNION ALL
SELECT id, month, col4 AS value, 'col4' AS descrip
FROM yourTable;</code>

이 쿼리는 다음 결과를 생성합니다.

id month value descrip
101 Jan A col1
102 Feb C col1
101 Jan B col2
102 Feb A col2
101 Jan NULL col3
102 Feb G col3
101 Jan B col4
102 Feb E col4

데이터 피봇팅 확대

데이터가 확장되면 집계 함수와 CASE 문을 사용하여 데이터를 피벗하여 원하는 보고서 형식을 만들 수 있습니다.

<code class="language-sql">SELECT descrip,
  MAX(CASE WHEN month = 'Jan' THEN value ELSE 0 END) AS jan,
  MAX(CASE WHEN month = 'Feb' THEN value ELSE 0 END) AS feb
FROM (
    SELECT id, month, col1 AS value, 'col1' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col2 AS value, 'col2' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col3 AS value, 'col3' AS descrip
    FROM yourTable
    UNION ALL
    SELECT id, month, col4 AS value, 'col4' AS descrip
    FROM yourTable
) AS src
GROUP BY descrip;</code>

위 쿼리는 다음과 같은 결과를 생성합니다.

descrip jan feb
col1 A C
col2 B A
col3 0 G
col4 B E

이 결과는 필수 보고서 형식과 일치합니다. 이러한 기술을 통해 우리는 MySQL에서 피벗 테이블 기능을 효과적으로 구현하고 열 기반 데이터를 행 기반 보고서로 쉽게 변환하여 보다 효율적인 분석 및 보고가 가능합니다.

위 내용은 UNION ALL 및 집계를 사용하여 MySQL에서 피벗 테이블을 시뮬레이션하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.