• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    해결됨

데이터가 기록이 되지 않은 경우는 어떻게 해결하나요?

21.06.20 12:52 작성 조회수 251

1

안녕하세요

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이 출력되는 점 참고해주세요.

근본적으로, 실무에서 필요한 데이터가 쌓이지 않는다면 해당 데이터가 쌓일 수 있도록 엔지니어링적인 도움이 필요할 것입니다. 하지만 쿼리를 작성하는 데에서 약간의 트릭이 필요한 경우라면, 위와 같은 방식을 시도해 볼 수 있겠네요. 말씀드린 방법이 절대적인 정답은 아니고, 헬로월드님이 직접 쿼리를 작성하시면서 더 좋은 방법을 찾아보실 수 있을 것이라고 생각합니다 :)

답변 감사합니다. 많은 도움 되었습니다!