[MySQL] 행, 열 변환 작업
2021. 8. 4. 17:52ㆍDataBase/MySQL
반응형
■ 행, 열 변환 작업
테이블의 행 데이터를 특정 기준으로 열 데이터로 변환하는 작업
■ 예시
과일 가게에서 판매하고 있는 과일은 [수박], [사과], [오렌지] 라고 특정할때, 날짜 별로 과일들의 수량을 계산하여 통계치를 구하려고 한다.
왼쪽은 과일이 판매될때 마다 작성한 데이터이고, 오른쪽은 구하고자 하는 결과 데이터이다.
■ 작업
첫번째, 과일 가게 가계부 테이블를 생성한다.
CREATE TABLE `tbl_fruit_shop` (
`pay_time` date NOT NULL COMMENT '구매 날짜',
`fruit` varchar(50) NOT NULL COMMENT '과일',
`cnt` int(11) NOT NULL COMMENT '수량'
)
반응형
두번째, 과일 가게 가계부 테이블를 조회했을 때 결과를 확인한다.
* 결과 데이터는 [예시]의 왼쪽 데이터와 동일하다고 가정한다.
결과)
세번째, 각 행을 과일 별로 구분하여 데이터를 출력한다.
* [CASE 문] 을 통해 행으로 구분되어 있던 데이터를 열로 수정
SELECT pay_time,
CASE WHEN fruit='수박' THEN cnt END AS 수박,
CASE WHEN fruit='사과' THEN cnt END AS 사과,
CASE WHEN fruit='오렌지' THEN cnt END AS 오렌지
FROM tbl_fruit_shop
ORDER BY pay_time
반응형
결과)
네번째, 날짜 별로 과일들의 수량을 합산한다.
* [SUM 함수] 와 [GROUP BY 문법]을 통해 데이터를 그룹화 함과 동시에 과일별 수량 합산
SELECT pay_time,
SUM(CASE WHEN fruit='수박' THEN cnt END) AS 수박,
SUM(CASE WHEN fruit='사과' THEN cnt END) AS 사과,
SUM(CASE WHEN fruit='오렌지' THEN cnt END) AS 오렌지
FROM tbl_fruit_shop
GROUP BY pay_time
ORDER BY pay_time
결과)
다섯째, 날짜 별로 판매되지 않은 과일의 수량은 0으로 치환한다.
* [COALESCE 함수]를 이용하여 NULL인 데이터는 0으로 치환
SELECT pay_time,
COALESCE(SUM(CASE WHEN fruit='수박' THEN cnt END), 0) AS 수박,
COALESCE(SUM(CASE WHEN fruit='사과' THEN cnt END), 0) AS 사과,
COALESCE(SUM(CASE WHEN fruit='오렌지' THEN cnt END), 0) AS 오렌지
FROM tbl_fruit_shop
GROUP BY pay_time
ORDER BY pay_time
반응형
결과)
반응형
'DataBase > MySQL' 카테고리의 다른 글
[MySQL] AUTO_INCREMENT 초기화 (0) | 2021.02.01 |
---|---|
[MySQL] WITH 재귀(RECURSIVE) 쿼리 계층구조 (0) | 2020.07.20 |
[MySQL] CASE 문 (0) | 2020.07.20 |
[MySQL] DATE_FORMAT 날짜데이터 형식 변환 (0) | 2020.07.20 |
[DB] MySQL 트랜잭션(Transaction) 예시 및 정리 (0) | 2020.06.10 |