데이터가 기록이 되지 않은 경우는 어떻게 해결하나요?
안녕하세요
6분 25초경' 데이터가 없는 경우 해결방법'에 대한 질문입니다.
date열의 값이 NULL이라면 다른 질문에서 답변해 주신 대로 ISNULL() 혹은 COALESCE() 함수를 사용하면 될 것 같은데요.
수업에서의 예시처럼 행(레코드) 자체가 기록이 되지 않은 경우라면 어떻게 해결해야하나요?
답변 1
2
안녕하세요 헬로월드님, 강의 속 예시를 이용해서 답변 드립니다.
1. 데이터 자체가 기록이 되지 않을 때 쿼리로 집계를 해야한다면, 기준이 되는 테이블을 이용하여 left 또는 right join을 하여 임의로 null값을 만들어줄 수 있을 것입니다.
모든 날짜가 들어있는 테이블을 만들고 해당 테이블에 crimes 테이블을 LEFT JOIN 하면, 범죄가 없었던 1월 6일에 null 값이 생기도록 해볼 수 있겠네요.
2. 혹은 AVG(daily_stats.incidents_daily)를 하지않고 SUM과 COUNT를 이용해서 직접 평균을 구해볼 수도 있을 것입니다.
분자에는 당연히 SUM(daily_stats.incidents_daily)가 들어가야 합니다. 하지만 분모는 단순히 COUNT(distinct date)를 하는 것이 아니라, date 컬럼에서 가장 최소 날짜와 최대 날짜의 차이를 구하는, 즉 DATEDIFF(max(date), min(date)) + 1 과 같이 해볼 수 있을 것입니다. DATEDIFF는 날짜간의 차이를 구하는 함수로, 같은 날 끼리의 차이는 0으로 집계됩니다. 따라서 +1을 해야 7이 출력되는 점 참고해주세요.
근본적으로, 실무에서 필요한 데이터가 쌓이지 않는다면 해당 데이터가 쌓일 수 있도록 엔지니어링적인 도움이 필요할 것입니다. 하지만 쿼리를 작성하는 데에서 약간의 트릭이 필요한 경우라면, 위와 같은 방식을 시도해 볼 수 있겠네요. 말씀드린 방법이 절대적인 정답은 아니고, 헬로월드님이 직접 쿼리를 작성하시면서 더 좋은 방법을 찾아보실 수 있을 것이라고 생각합니다 :)
순위 함수 연습 문제 - 스테디셀러 작가 찾기
0
99
1
문제 내용이 잘못된 것 같습니다.
0
72
2
서브쿼리 질문
0
74
2
[수업질문] 서브쿼리 > null데이터 avg사용 주의
0
84
1
서브쿼리는 언제 작성하는건가요?
0
85
1
안녕하세요 질문드립니다.
0
71
2
Top Earners 문제관련 질문
0
100
2
고급반 cheetsheet
0
164
2
196. Delete Duplicate Emails 좋은 코드 질문
0
145
1
a.id = 1과 b.id=1이 없어도 되는 이유
0
133
0
강의 플랫폼
0
203
3
리트코드 177번 function 풀이중 case when 활용을 위한 서브쿼리 구문을 제출 시 검증에 통과되지 않도록 보강된 듯 하네요
0
213
2
ERD 읽는법에 추가 질문 있어요
0
258
1
lead, lag로 풀이할 시 id 값이 존재하지 않는 경우의 오답
0
368
2
사용자정의함수
0
233
1
이 문제 inner join이 이해가 안됩니다.
0
302
1
평균 함수 사용할 때 주의점과 해결법
0
266
1
196. subquery로 풀 때, 궁금한 점
0
391
2
쿼리성능 질문드립니다.
0
318
1
리트코드 highest department salary 문제
0
264
2
The report 문제 order by부분 질문
0
272
2
리트코드 서브쿼리 문제 질문
0
423
1
DEPARTMENT HIGHEST SALARY 서브쿼리 문제 문의
0
243
1
서브쿼리의 활용사례 및 조인관련질문
0
292
1





