MySQL

MySQL의 데이터 형식-5(피벗구현, JSON데이터).MySQL

john_ 2023. 2. 7. 15:51
728x90

2023.02.07 - [MySQL] - MySQL의 데이터 형식-4(시스템 정보 함수).MySQL

 

MySQL의 데이터 형식-4(시스템 정보 함수).MySQL

2023.02.07 - [MySQL] - MySQL의 데이터 형식-3(날짜 및 시간함수).MySQL MySQL의 데이터 형식-3(날짜 및 시간함수).MySQL 2023.02.07 - [MySQL] - MySQL의 데이터 형식-3(수학함수).MySQL MySQL의 데이터 형식-3(수학함수).My

less-go.tistory.com

 

이전 글에서 계속됩니다.

 


피벗의 구현

  • 피벗(PIVOT) 이란?
    • 한 열에 포함된 여러 값을 출력, 이를 여러 열로 변환하여 테이블 반환식 회전,
    • 필요하면 집계까지 수행합니다.

use sqldb;

create table pivotTest(
	uName char(3),
    season char(2),
    amount int
);

desc pivottest;

insert into pivottest values
	('김범수', '겨울', 10), ('윤종신', '여름', 15),
    ('김범수', '가을',25), ('김범수', '봄', 3),
    ('김범수', '봄', 37),('윤종신', '겨울', 40),
    ('김범수', '여름', 14),('김범수', '겨울', 22),
    ('윤종신', '여름', 64);
    
select * from pivottest;

-- 피벗 구현 SUM() 과 IF(), GROUP BY
select uName,
	SUM(IF(season='봄', amount, 0)) as '봄',
    SUM(IF(season='여름', amount, 0)) as '여름',
    SUM(IF(season='가을', amount, 0)) as '가을',
    SUM(IF(season='겨울', amount, 0)) as '겨울',
    SUM(amount) as '합계' FROM PIVOTTEST group by uname;
    
select * from pivottest;

select season,
	sum(if(uname='김범수', amount,0)) as '김범수',
	sum(if(uname='윤종신', amount,0)) as '윤종신',
    sum(amount) as '합계' from pivottest group by season;

 


JSON 데이터

  • JSON(JavaScript Object Notation)이란?
    • 웹과 모바일 응용 프로그램 등과 데이터 교환 하기 위한 개방형 표준 포맷
    • 속성(key) 과 값(value)로 쌍을 이루며 구성
    • JavaScript 언어에서 파생
    • 포맷이 단순하고 공개되어 있기에 거의 대부분으 ㅣ프로그래밍 언어에서 쉽게  쓸슀거나 쓸수 있도록 코딩가능
    • MySQL 5.7.8 부터 지원
    • MySQL 8.0 에서는 인라인 패스라 불리는 - > 연산자 및 JSON_ARRAYAGG(), JSON_OBJECTAGG(), JSON_PRETTY(), JSON_STORAGE_SIZE(), JSON_STORAGE_FREE(), JSON_MERGE_PATCH() 등의 함수가 추가 되었습니다.
- json 데이터 : 일반적인 데이터 내용을 JSON 타입으로 변경해서 출력
-- 속성명 : 속성값 		JSON 형태로 출력

use sqldb;
select JSON_OBJECT('name', name, 'height', height) as 'json 값' from usertbl
	where height >= 180;
    
set @json = '{"usertbl" : [
	{"name" : "임재범", "height" : 182},
    {"name" : "이승기", "height" : 182},
    {"name" : "성시경", "height" : 186}
	]
}';

select JSON_VALID(@JSON) AS JSON_VALID;		-- JSON 형식을 가지고 있는지 확인, 만족 : 1, 만족x : 0
SELECT JSON_SEARCH(@JSON, 'ONE', '성시경') AS JSON_SEARCH;		-- 성시경의 위치를 확인, ONE : 첫번쨰 매칭, ALL : 모두
SELECT JSON_EXTRACT(@JSON, '$.USERTBL[2].NAME') AS JSON_EXTRACT;	-- USERTBL[2].NAME 2행의 이름값 출력
SELECT JSON_INSERT(@JSON, '$.USERTTBL[0].MDATE', '2009-09-09') AS JSON_INSERT;	-- USERTBL[0] 번째에 MDATE값 추가
SELECT JSON_REPALCE(@JSON, '$.USERTBL[0].NAME', '홍길동') AS JSON_REPLACE; -- 치환 USERTBL[0].NAME 이름을 변경
SELECT JSON_REMOVE(@JSON, '$.USERTBL[0]') AS JSON_REMOVE;	-- 제거 USERTBL[0] 번째 값 제거

 

 


 

728x90