• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

[백문이불여일타] 데이터 분석을 위한 고급 SQL | 서브쿼리 | 7분 27초

21.04.01 15:14 작성 조회수 112

1

강사님께서 date 컬럼에서 날짜가 빠져있을 수 있다고 말씀해주셨습니다. 

그럴때 AVG()를 계산할때 조심하라고 말씀해주셨습니다.

예를 들어 강사님이 말씀해주신 쿼리로 작성한다면 아래와 같은 결과가 나온다고 말씀해주셨습니다. 

1. 날짜가 공백이 없는 상태:(7+1+3+2+4+3+2)/ 7

2. 날짜가 공백이 있는 상태:(7+1+2+4+3+2)/6

3. 실제 원하는 "날짜가 공백이 있는 상태":(7+1+0+2+4+3+2)/7

조심하라고만 말씀해주시고 어떻게 쿼리를 작성할떄 조심해야할지 스크립트를 보여주시지 않아 stackoverflow를 찾아봐도 찾기가 힘들어 질문을 남깁니다. 

답변 1

답변을 작성해보세요.

1

안녕하세요 :)

두 가지 방법이 있을 수 있겠습니다.

1. 간단하게는 SUM(incidents_daily) / 7 처럼 쿼리를 작성해서, 분모가 7이라는 것을 명확하게 할 수 있습니다.

2. date 정보를 가지고 있는 메타 테이블을 기준으로 daily_stats 라는 테이블을 LEFT JOIN 하고 -> 비는 날짜 때문에 생기는 incidents_daily 컬럼의 NULL 값들을 0으로 대체하는 연산을 한 뒤에 -> AVG() 함수를 사용해 평균을 구하는 방법이 있습니다.

보통은 대체 공휴일이나, 회사 기준의 휴무일 등을 계산하기 위해 날짜와 관련된 테이블을 회사마다 관리하고 있으니, 업무에 활용하신다면 2번 방법을 활용해보시는 것도 좋을 것 같습니다.

감사합니다.