MySQL 피벗 테이블 쿼리: 데이터 분석을 위해 동적 열 사용
P粉101708623
2023-08-22 11:54:19
<p>다음 표를 사용하여 제품 데이터를 저장하고 있습니다. </p>
<pre class="brush:php;toolbar:false;">mysql> SELECT * FROM product;
+---------------+---------------+-------+
| 아이디 | 설명 |
+---------------+---------------+-------+
| 1 | 제품1 | 5 |
| 2 | 제품2 | 5 |
+---------------+---------------+-------+
mysql> SELECT * FROM product_additional;
+------+----------------+
| ID | 필드값 |
+------+----------------+
1 |사이즈 |
1 | 높이 |
2 |사이즈 |
2 |
2 | 색상 |
+-----------------+----------------+</pre>
<p>두 테이블 모두에서 레코드를 선택하려면 다음 쿼리를 사용하세요. </p>
<pre class="brush:php;toolbar:false;">mysql>
p.id
,p.이름
, p.설명
,MAX(IF(pa.fieldname = 'size', pa.fieldvalue, NULL)) as `size`
,MAX(IF(pa.fieldname = 'height', pa.fieldvalue, NULL)) as `height`
,MAX(IF(pa.fieldname = 'color', pa.fieldvalue, NULL)) as `color`
제품 p에서
LEFT JOIN product_additional AS pa ON p.id = pa.id
GROUP BY p.id
+---------------+---------------+---------+-------- -+---------+
| 아이디 | 이름 | 크기 |
+---------------+---------------+---------+-------- -+---------+
| 1 | 제품1 | S |
| 2 | 제품2 | L |
+---------------+---------------+---------+-------- -+---------+</pre>
<p>모든 것이 잘 작동합니다 :) </p>
<p>"추가" 테이블을 동적으로 채우고 있으므로 쿼리도 동적이면 좋을 것입니다. 이렇게 하면 새 필드 이름과 필드 값을 입력할 때마다 쿼리를 변경할 필요가 없습니다. </p>
이를 수행하는 방법은 허용된 답변과 약간 다릅니다. 이 접근 방식은 기본적으로 1024자 제한이 있는 GROUP_CONCAT 사용을 방지하며 제한을 변경하지 않는 한 필드가 많으면 작동하지 않습니다.
으아악데모를 보려면 여기를 클릭하세요
MySQL에서 이를 동적으로 수행하는 유일한 방법은 준비된 문을 사용하는 것입니다. 여기에 대한 좋은 기사가 있습니다:
동적 피벗 테이블(행을 열로 변환)
귀하의 코드는 다음과 같습니다:
으아아아보기 데모
참고: GROUP_CONCAT 함수의 문자 제한은 1024자입니다. 매개변수 group_concat_max_len
을 참조하세요.