피벗테이블 실습

>>> tb_test 테이블을 다음과 같이 출력하시오

▼기존 tb_test 테이블

▼출력할 형태

>>> 구문 작성

/* if문을 사용한 피벗테이블 */
SELECT
	t.t_season AS '계절',
	SUM(if (t.t_name='김성주', t.t_amount, 0)) AS '김성주',
	SUM(if(t.t_name='정동영', t.t_amount, 0)) AS '정동영',
	SUM(t.t_amount) AS '합계'
FROM
	tb_test AS t
GROUP BY t.t_season;
/* case문을 사용한 피벗테이블 */
SELECT
	t.t_season AS '계절',
	SUM(case 
		when t.t_name='김성주' then t.t_amount 
		ELSE 
			0 
		END) AS '김성주',
	SUM(case 
		when t.t_name='정동영' then t.t_amount 
		ELSE 
			0 
		END) AS '정동영',
	SUM(t.t_amount) AS '합계'
FROM
	tb_test AS t
GROUP BY t.t_season;

>>> 결과확인

>>> if 구문을 사용하여 IF(조건, 조건에 부합할 때의 출력, 조건에 부합하지 않을때의 출력) 형태로 작성하여 피벗테이블 작성.(CASE구문은 WHEN에 조건, THEN에 조건부합시 출력, ELSE에 조건미부합시 출력의 형태로 작성하였다.)

그룹콘캣(GROUP_CONCAT) 실습

>>> 구매자별 구매이력 중 상품별로 구매수량이 20개 이상인 상품의 목록을 추출하여 다음과 같이 조회하여라.

▼출력할 형태

>>> 구문작성

SELECT
	result.m_id AS '구매자아이디',
	result.m_name AS '구매자명', 
	GROUP_CONCAT(result.g_name) AS '상품목록'
FROM
	(SELECT
		m.m_id,
		m.m_name,
		g.g_name
	FROM
		tb_member AS m
		INNER JOIN 
		tb_order AS o
		ON
		m.m_id = o.o_id
		INNER JOIN 
		tb_goods AS g
		ON
		o.o_g_code = g.g_code
	GROUP BY m.m_id, g.g_code
	HAVING SUM(o.o_amount) >= 20) AS result
GROUP BY result.m_id;

>>> 결과확인

>>> GROUP BY, HAVING의 실행순서를 파악하고 FROM구절에 INNER JOIN을 사용하여 구문을 작성하였다.

'DBMS' 카테고리의 다른 글

MySQL - 사용자 정의 함수(프로시저와 차이점)  (0) 2023.05.15
MySQL - 프로시저  (0) 2023.05.15
SQL - 서브쿼리  (0) 2023.05.15
SQL - JOIN  (0) 2023.05.15
MySQL 데이터 타입과 내장 함수  (0) 2023.05.15

+ Recent posts