>데이터 베이스 >MySQL 튜토리얼 >GROUP_CONCAT을 사용하여 MySQL에서 데이터를 피벗하고 동적 열 헤더를 처리하는 방법은 무엇입니까?

GROUP_CONCAT을 사용하여 MySQL에서 데이터를 피벗하고 동적 열 헤더를 처리하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-06 09:44:43410검색

How to Pivot Data in MySQL Using GROUP_CONCAT and Handle Dynamic Column Headers?

MySQL PIVOT/CROSSTAB QUERY

데이터 분석에서는 데이터를 세로 형식에서 가로 형식으로 변환해야 하는 경우가 많습니다. 피벗 또는 교차표로 표시됩니다. MySQL에서는 다양한 기술을 사용하여 이를 달성할 수 있습니다.

피벗 테이블 생성

질문 1: 다음 열이 포함된 테이블을 생각해 보세요. app_id, transaction_id, mobile_no, node_id, customer_attribute 및 Entered_value입니다. 작업은 app_id, transaction_id 및 mobile_no로 그룹화된 피벗 테이블을 생성하는 것입니다. 여기서 node_id의 값은 열 헤더가 되고 해당 입력_값은 셀에 표시됩니다.

답변: 이 GROUP_CONCAT 함수를 사용하여 달성할 수 있습니다:

SELECT
  app_id,
  transaction_id,
  mobile_no,
  GROUP_CONCAT(CASE WHEN node_id = 1 THEN entered_value ELSE NULL END) AS Q1,
  GROUP_CONCAT(CASE WHEN node_id = 2 THEN entered_value ELSE NULL END) AS Q2,
  GROUP_CONCAT(CASE WHEN node_id = 3 THEN entered_value ELSE NULL END) AS Q3,
  GROUP_CONCAT(CASE WHEN node_id = 4 THEN entered_value ELSE NULL END) AS Q4,
  GROUP_CONCAT(CASE WHEN node_id = 5 THEN entered_value ELSE NULL END) AS Q5
FROM
  trn_user_log
GROUP BY
  app_id,
  transaction_id,
  mobile_no;

사용 NAME_CONST

질문 2: user_input1, user_input2 등을 열 헤더로 사용하는 대신 customer_attribute에 저장된 값을 사용하고 싶습니다.

답변: 이는 NAME_CONST 함수를 사용하여 달성할 수 있지만 제공된 잘못된 인수로 인해 오류가 발생했습니다:

SELECT
  app_id,
  transaction_id,
  mobile_no,
  NAME_CONST(customer_attribute, (CASE WHEN node_id = 1 THEN entered_value ELSE NULL END))
FROM
  trn_user_log;

함수는 두 번째 인수에 대해 상수 값을 기대하므로 수정이 필요합니다:

SELECT
  app_id,
  transaction_id,
  mobile_no,
  CASE node_id
    WHEN 1 THEN NAME_CONST(customer_attribute, entered_value)
    ELSE NULL
  END AS customer_attribute
FROM
  trn_user_log;

위 내용은 GROUP_CONCAT을 사용하여 MySQL에서 데이터를 피벗하고 동적 열 헤더를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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