> 데이터 베이스 > MySQL 튜토리얼 > 집계 함수와 CASE 문을 사용하여 MySQL에서 데이터를 동적으로 피벗하는 방법은 무엇입니까?

집계 함수와 CASE 문을 사용하여 MySQL에서 데이터를 동적으로 피벗하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-06 07:56:43
원래의
596명이 탐색했습니다.

How to Dynamically Pivot Data in MySQL Using Aggregate Functions and CASE Statements?

MySQL의 집계 함수 및 CASE 문을 사용하여 동적으로 데이터 회전

다음 스키마를 사용하는 제품 부품 테이블을 고려하세요.

CREATE TABLE Parts (
    part_id INT NOT NULL,
    part_type CHAR(1) NOT NULL,
    product_id INT NOT NULL,
    PRIMARY KEY (part_id)
);
로그인 후 복사

샘플 데이터:

INSERT INTO Parts (part_id, part_type, product_id) VALUES
(1, 'A', 1),
(2, 'B', 1),
(3, 'A', 2),
(4, 'B', 2),
(5, 'A', 3),
(6, 'B', 3);
로그인 후 복사

이 데이터를 제품 부품을 열로 나타내는 테이블로 피벗하는 것이 목표입니다.

CREATE TABLE PivotedParts (
    product_id INT NOT NULL,
    part_A_id INT,
    part_B_id INT,
    PRIMARY KEY (product_id)
);
로그인 후 복사

동적 피벗 솔루션:

MySQL에는 PIVOT 기능이 내장되어 있지 않지만 집계 기능을 사용하여 동적 솔루션을 구현할 수 있습니다. 및 CASE 문:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when part_type = ''',
      part_type,
      ''' then part_id end) AS part_',
      part_type, '_id'
    )
  ) INTO @sql
FROM
  Parts;

SET @sql = CONCAT('SELECT product_id, ', @sql, ' 
                  FROM Parts 
                   GROUP BY product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
로그인 후 복사

출력 예:

+------------+----------+----------+
| product_id | part_A_id | part_B_id |
+------------+----------+----------+
| 1          | 1        | 2        |
| 2          | 3        | 4        |
| 3          | 5        | 6        |
+------------+----------+----------+
로그인 후 복사
로그인 후 복사

정적 피벗 솔루션(제한된 수의 열에 대해):

열 수가 제한된 정적 피버팅 솔루션의 경우 다음 쿼리를 사용할 수 있습니다. 사용:

SELECT product_id,
  max(case when part_type ='A' then part_id end) as part_A_id,
  max(case when part_type ='B' then part_id end) as part_B_id
FROM Parts
GROUP BY product_id;
로그인 후 복사

출력:

+------------+----------+----------+
| product_id | part_A_id | part_B_id |
+------------+----------+----------+
| 1          | 1        | 2        |
| 2          | 3        | 4        |
| 3          | 5        | 6        |
+------------+----------+----------+
로그인 후 복사
로그인 후 복사

위 내용은 집계 함수와 CASE 문을 사용하여 MySQL에서 데이터를 동적으로 피벗하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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