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 |
Tags
- 딥러닝
- MySQL
- 통계학
- 월간결산
- 티스토리
- 블로그
- Visualization
- 파이썬 시각화
- MATLAB
- 한빛미디어
- 파이썬
- 독후감
- matplotlib
- 텐서플로
- Pandas
- SQL
- 한빛미디어서평단
- Ga
- Tistory
- 서평
- python visualization
- Linux
- 서평단
- 시각화
- Blog
- Google Analytics
- tensorflow
- 매틀랩
- Python
- 리눅스
Archives
- Today
- Total
pbj0812의 코딩 일기
[SQL] RIGHT JOIN 과 UNION 을 이용한 빈 키 값 채우기 본문
0. 목표
- RIGHT JOIN 과 UNION 을 이용한 빈 키 값 채우기
1. 실습
1) 테이블 생성
CREATE TABLE sql_test.full1
(
id int,
dated datetime
);
CREATE TABLE sql_test.full2
(
id int,
dated datetime
);
2) 데이터 삽입
INSERT INTO sql_test.full1(id, dated) VALUES(1, '2021-01-01 12:12:12');
INSERT INTO sql_test.full1(id, dated) VALUES(2, '2021-01-01 13:12:12');
INSERT INTO sql_test.full1(id, dated) VALUES(3, '2021-01-04 12:12:12');
INSERT INTO sql_test.full1(id, dated) VALUES(4, '2021-01-04 13:12:12');
INSERT INTO sql_test.full1(id, dated) VALUES(5, '2021-01-04 14:12:12');
INSERT INTO sql_test.full2(id, dated) VALUES(1, '2021-01-01 12:12:12');
INSERT INTO sql_test.full2(id, dated) VALUES(2, '2021-01-01 13:12:12');
INSERT INTO sql_test.full2(id, dated) VALUES(3, '2021-01-03 12:12:12');
INSERT INTO sql_test.full2(id, dated) VALUES(4, '2021-01-03 13:12:12');
INSERT INTO sql_test.full2(id, dated) VALUES(5, '2021-01-03 14:12:12');
(1) full1
- 1, 4 일 데이터만 들어가 있음
(2) full2
- 1, 3 일 데이터만 들어가 있음
3) 연산
- A 에서는 full1 를 날짜별로 연산
- B 에서는 full2 를 날짜별로 연산
- C 에서 UNION 으로 구분하여 LEFT JOIN 으로 A 의 날짜 기준으로 데이터를 만들고, RIGHT JOIN 으로 B 의 날짜 기준으로 데이터를 만들어 접합(UNION 을 쓰기 때문에 중복은 걸러짐)
- 날짜 순으로 정렬
WITH A AS (
SELECT
DATE_FORMAT(dated, '%Y-%m-%d') AS dated,
COUNT(*) AS CNT
FROM sql_test.full1
GROUP BY 1
),
B AS (
SELECT
DATE_FORMAT(dated, '%Y-%m-%d') AS dated,
COUNT(*) AS CNT2
FROM sql_test.full2
GROUP BY 1
),
C AS (
SELECT
A.dated,
A.CNT,
IFNULL(B.CNT2, 0) CNT2
FROM A
LEFT JOIN B
ON A.dated = B.dated
UNION
SELECT
B.dated,
IFNULL(A.CNT, 0) AS CNT,
B.CNT2
FROM A
RIGHT JOIN B
ON A.dated = B.dated
)
SELECT * FROM C ORDER BY dated ASC;
'ComputerLanguage_Program > SQL' 카테고리의 다른 글
[SQL] 분기별 결산 확인 (0) | 2021.10.03 |
---|---|
[SQL] MySQL event 생성, 수정, 삭제 테스트 (0) | 2021.09.17 |
[SQL] ROLLUP 을 이용한 여러 방법으로 평균 구하기 (0) | 2021.08.28 |
[SQL] MySQL function 생성 및 테스트 (0) | 2021.07.14 |
[SQL] 서브쿼리로 휴일을 제외한 근무일수 계산하기 (0) | 2021.07.12 |
Comments