Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- python visualization
- Pandas
- Tistory
- Ga
- Linux
- Blog
- 서평
- 독후감
- Python
- Visualization
- 서평단
- 월간결산
- matplotlib
- 한빛미디어
- 시각화
- 매틀랩
- MATLAB
- 리눅스
- MySQL
- 텐서플로
- 통계학
- Google Analytics
- 파이썬
- 파이썬 시각화
- 한빛미디어서평단
- SQL
- 블로그
- 딥러닝
- tensorflow
- 티스토리
Archives
- Today
- Total
pbj0812의 코딩 일기
[SQL] 복수개의 json 정보들을 풀어헤치기 본문
0. 목표
- 복수개의 json 정보들을 풀어헤치기
1. 실습
1) 테이블 생성
CREATE TABLE sql_study.json_test
(
id int,
json_field longtext
);
2) 데이터 삽입
- id 가 1 인 것은 json 두개가 결합되어 있고, 3 은 세개가 결합되어 있음
INSERT INTO sql_study.json_test(id, json_field) VALUES(1, '[{"a" : "abc", "b" : "bbc"}, {"a" : "abc2", "b" : "bbc2"}]');
INSERT INTO sql_study.json_test(id, json_field) VALUES(2, NULL);
INSERT INTO sql_study.json_test(id, json_field) VALUES(3, '[{"a" : "abc", "b" : "bbc"}, {"a" : "abc2", "b" : "bbc2"}, {"a" : "abc3", "b" : "bbc3"}]');
3) 풀기
- 처음 cte 구문 결과를 통해 1 ~ 10 까지의 숫자를 얻을 수 있음
- 두번째 구문 결과를 통해 json 의 길이에 맞게 행이 곱해지는 결과를 얻을 수 있음
- 세 번째 구문 결과를 통해 각 행의 숫자에 맞는 데이터를 추출
# 1부터 10까지 배열 만들기
WITH RECURSIVE cte AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM cte WHERE n < 10
),
# 모든 데이터에 배열 곱해주기
a AS (
SELECT
j.id,
j.json_field,
JSON_LENGTH(j.json_field) AS json_length,
c.n
FROM sql_study.json_test AS j, cte AS c
WHERE 1 = 1
# json 이 NULL 제외
AND j.json_field IS NOT NULL
# 배열숫자 <= json 길이
AND JSON_LENGTH(j.json_field) >= c.n
),
final AS (
SELECT
id,
n,
JSON_EXTRACT(json_field, CONCAT('$[',n-1,'].a')) AS result
FROM a
ORDER BY 1, 2 ASC
)
SELECT * FROM final;
2. 참고
- what is mysql query to print 1 to 10?
'ComputerLanguage_Program > SQL' 카테고리의 다른 글
[SQL] RECURSIVE CTE 구문을 통한 길찾기 (0) | 2023.02.17 |
---|---|
[SQL] 윈도우 함수를 이용한 이동 평균 구하기 (0) | 2022.09.27 |
[SQL] REGEXP 를 이용한 정규식 조건에 들어맞는 데이터만 추출하기 (0) | 2022.07.26 |
[SQL] window 함수 frame 절 예제 (0) | 2022.03.15 |
[SQL] 이탈 회원 확인 (0) | 2022.02.07 |
Comments