-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
해결됨
데이터가 기록이 되지 않은 경우는 어떻게 해결하나요?
21.06.20 12:52 작성 조회수 251
1
안녕하세요
6분 25초경' 데이터가 없는 경우 해결방법'에 대한 질문입니다.
date열의 값이 NULL이라면 다른 질문에서 답변해 주신 대로 ISNULL() 혹은 COALESCE() 함수를 사용하면 될 것 같은데요.
수업에서의 예시처럼 행(레코드) 자체가 기록이 되지 않은 경우라면 어떻게 해결해야하나요?
답변을 작성해보세요.
2
송혜정
지식공유자2021.06.20
안녕하세요 헬로월드님, 강의 속 예시를 이용해서 답변 드립니다.
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이 출력되는 점 참고해주세요.
근본적으로, 실무에서 필요한 데이터가 쌓이지 않는다면 해당 데이터가 쌓일 수 있도록 엔지니어링적인 도움이 필요할 것입니다. 하지만 쿼리를 작성하는 데에서 약간의 트릭이 필요한 경우라면, 위와 같은 방식을 시도해 볼 수 있겠네요. 말씀드린 방법이 절대적인 정답은 아니고, 헬로월드님이 직접 쿼리를 작성하시면서 더 좋은 방법을 찾아보실 수 있을 것이라고 생각합니다 :)
답변 1