MySQL 피벗: 열을 행으로 변환
MySQL에서는 데이터를 더 잘 표현하기 위해 열을 행으로 변환하여 피벗 테이블을 생성해야 합니다. 예를 들어, 여러 달(예: 1월, 2월)의 데이터를 나타내는 여러 열(예: col1, col2)이 포함된 테이블을 생각해 보세요.
요구 사항: 피벗 테이블 형식으로 데이터를 표시하는 보고서를 만듭니다. 여기서 각 행은 원본 테이블의 열을 나타내고 각 열은 다른 달을 나타냅니다.
데이터 확장:
MySQL에는 데이터 전개(열을 행으로 변환)를 위한 내장 기능이 없습니다. 그러나 이는 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 |
101 | Jan | B | col2 |
101 | Jan | NULL | col3 |
101 | Jan | B | col4 |
102 | Feb | C | col1 |
102 | Feb | A | col2 |
102 | Feb | G | col3 |
102 | Feb | E | col4 |
피벗:
데이터가 확장되면 집계 함수를 사용하여 원하는 피벗 테이블 형식으로 변환할 수 있습니다. 다음 쿼리는 CASE 문을 사용하여 각 열(설명)별로 데이터를 그룹화하고 1월과 2월의 값을 표시합니다.
<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 ) src GROUP BY descrip</code>
결과:
이 쿼리는 필수 피벗 테이블 형식을 생성합니다.
DESCRIP | JAN | FEB |
---|---|---|
col1 | A | C |
col2 | B | A |
col3 | 0 | G |
col4 | B | E |
위 내용은 MySQL에서 데이터를 피벗하는 방법: 열을 행으로 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!