> 데이터 베이스 > MySQL 튜토리얼 > PIVOT을 사용하여 MySQL에서 동적 크로스탭 쿼리를 수행하는 방법은 무엇입니까?

PIVOT을 사용하여 MySQL에서 동적 크로스탭 쿼리를 수행하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-06 09:30:41
원래의
652명이 탐색했습니다.

How to Perform Dynamic Crosstab Queries in MySQL Using PIVOT?

MySQL PIVOT/CROSSTAB 쿼리

문제 설명:

다양한 속성에 대한 사용자 입력을 나타내는 데이터가 있는 테이블을 크로스탭으로 변환해야 합니다. 여기서 각 열 머리글은 속성을 나타내고 각 행에는 해당 속성에 해당하는 사용자 입력 값이 포함됩니다. 또한 customer_attribute 열의 값은 정적 레이블 대신 열 머리글로 사용해야 합니다.

쿼리 1: 데이터를 크로스탭 형식으로 변환

원하는 크로스탭 형식을 얻으려면 PIVOT 쿼리는 다음과 같습니다.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE node_id when ',
      node_id,
      ' then entered_value else NULL END) AS user_input',
      node_id
    )
  ) INTO @sql
FROM trn_user_log;


SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                  FROM trn_user_log 
                  GROUP BY app_id, transaction_id, mobile_no');

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

이 쿼리는 PIVOT 연산자를 사용하여 행을 열로 변환하고 app_id, transaction_id 및 mobile_no 열.

쿼리 2: 사용자 정의 열 헤더 사용

customer_attribute 열의 값을 열 헤더로 사용하려면 위 쿼리를 약간 수정하면 됩니다.

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE node_id when ',
      node_id,
      ' then entered_value else NULL END) AS ',
      customer_attribute
    )
  ) INTO @sql
FROM trn_user_log;

SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                  FROM trn_user_log 
                  GROUP BY app_id, transaction_id, mobile_no');

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

이 수정된 쿼리는 정적 열 헤더(user_input1, user_input2 등)를 해당 customer_attribute 값.

참고:

  • 이러한 쿼리에 사용된 준비된 문은 동적 열 생성을 보장하고 알 수 없는 개수의 열을 처리할 때 잠재적인 구문 오류를 방지합니다.
  • 초기 쿼리에 사용된 NAME_CONST 함수는 이 경우 적용할 수 없습니다. 두 번째 인수로 상수 값이 필요하며 이는 동적 열에는 적합하지 않기 때문입니다. 세대입니다.

위 내용은 PIVOT을 사용하여 MySQL에서 동적 크로스탭 쿼리를 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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