[MSSQL] 이전 값으로 NULL 값 대체하기딥상어동의 딥한 SQL/LV2.중급쿼리2021. 8. 31. 11:09
Table of Contents
0. 문제
SQL을 하다보면 문득 이런 고민에 빠질때가 있습니다.
저기 NULL값을 이전 값으로 대체하고 싶은데... 어떻게 하지?
왜냐하면, SQL에는 Pandas fillna 함수의 ffill과 같은 메서드가 없기 때문인데요.
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.fillna.html
Row_number를 이용하면 쉽게 해결할 수 있습니다. (코드는 MSSQL 기준입니다.)
1. 샘플 테이블 생성
create table tb
(
id int
,num int
)
insert into tb
values
(1, 90661), (2, 97560), (3, 80744), (4, null), (5, null), (6, 23312), (7, 21345), (8, null), (9, null), (10, 21322)
select * from tb
2. NULL 이전 값으로 대체
해결 방법은 다음과 같습니다.
1. row_number() 를 사용하여 id별로 인덱스를 생성한다.
2. num의 값이 null인 index는 이전 값의 index로 대체합니다.
3. 원본 테이블에서 index별로 값을 불러옵니다.
select *
, (
select num
from tb_rownum A
where A.rownum = (
-- null이전의 index == max
select max(b.rownum)
from tb_rownum b
-- null인 경우 null이전의 index를 가져옴
where b.rownum <= c.rownum
and b.num is not null
)
) as substitute_num
from tb_rownum c
'딥상어동의 딥한 SQL > LV2.중급쿼리' 카테고리의 다른 글
[SQL] 윈도우 함수 범위 지정을 이용하여 퍼널 분석 로직 짜보기 - feat.window frame (0) | 2022.06.17 |
---|---|
[SQL] CASE WHEN이 가진 의의 (0) | 2021.06.27 |
[SQL] Group By VS Window 함수 (0) | 2021.06.27 |
[SQL] SubQuery가 가진 의의 (0) | 2021.06.27 |
[SQL] 언어가 가진 철학 (0) | 2021.06.27 |
@딥상어동의 딥한생각 :: 딥상어동의 딥한생각
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!