>  기사  >  데이터 베이스  >  GROUP BY를 사용하여 MySQL에서 쿼리 결과를 피벗하는 방법은 무엇입니까?

GROUP BY를 사용하여 MySQL에서 쿼리 결과를 피벗하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-15 10:46:02781검색

How to Pivot Query Results in MySQL Using GROUP BY?

GROUP BY를 사용한 MySQL PIVOTING 쿼리 결과

목표

PIVOT 또는 GROUP BY 기술을 사용하여 MySQL 테이블의 행을 열로 변환합니다.

배경

데이터 변환 기술인 PIVOTING은 행 데이터를 열로 재배열합니다. 이 경우 목표는 타임스탬프와 같은 특정 열을 기준으로 데이터를 그룹화하고 각 데이터 값을 별도의 열로 표시하는 것입니다.

CASE 문 사용

기존 PIVOT 구문 대신 MySQL에서는 널리 지원되지 않는 SUM() 함수를 CASE 문과 함께 사용하여 원하는 결과를 얻을 수 있습니다.

<code class="sql">SELECT d.data_timestamp
     , SUM(CASE WHEN data_id = 1 THEN data_value ELSE 0 END) AS 'input_1'
     , SUM(CASE WHEN data_id = 2 THEN data_value ELSE 0 END) AS 'input_2'
     ...
     , SUM(CASE WHEN data_id = 20 THEN data_value ELSE 0 END) AS 'input_20'
FROM data
GROUP BY data_timestamp
ORDER BY data_timestamp ASC</code>

IF 문 사용

또는 IF 문 동일한 결과를 얻기 위해 SUM() 함수 내에서 사용할 수 있습니다.

<code class="sql">SELECT d.data_timestamp
     , SUM(IF(data_id = 1, data_value, 0)) AS 'input_1'
     , SUM(IF(data_id = 2, data_value, 0)) AS 'input_2'
     ...
     , SUM(IF(data_id = 20, data_value, 0)) AS 'input_20'
FROM data
GROUP BY data_timestamp
ORDER BY data_timestamp ASC</code>

여러 JOIN 문 사용

또 다른 접근 방식은 여러 JOIN 문을 사용하여 원하는 출력을 생성하는 것입니다.

<code class="sql">SELECT d.data_timestamp
     , d01.data_value AS 'input_1'
     , d02.data_value AS 'input_2'
     ...
     , d20.data_value AS 'input_20'
FROM
  (SELECT DISTINCT d.data_timestamp
    FROM data
  ) AS d
  LEFT JOIN data AS d01
    ON d01.data_timestamp = d.data_timestamp
    AND d01.data_id = 1
  LEFT JOIN data AS d02
    ON d02.data_timestamp = d.data_timestamp
    AND d02.data_id = 2
  ...                                   --- 20 JOINs
  LEFT JOIN data AS d20
    ON d20.data_timestamp = d.data_timestamp
    AND d20.data_id = 20
ORDER BY d.data_timestamp ASC</code>

이러한 기술을 활용하면 GROUP BY를 사용하여 MySQL에서 쿼리 결과를 쉽게 피벗할 수 있습니다.

위 내용은 GROUP BY를 사용하여 MySQL에서 쿼리 결과를 피벗하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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