-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
[백문이불여일타] 데이터 분석을 위한 고급 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
윤선미
지식공유자2021.04.05
안녕하세요 :)
두 가지 방법이 있을 수 있겠습니다.
1. 간단하게는 SUM(incidents_daily) / 7 처럼 쿼리를 작성해서, 분모가 7이라는 것을 명확하게 할 수 있습니다.
2. date 정보를 가지고 있는 메타 테이블을 기준으로 daily_stats 라는 테이블을 LEFT JOIN 하고 -> 비는 날짜 때문에 생기는 incidents_daily 컬럼의 NULL 값들을 0으로 대체하는 연산을 한 뒤에 -> AVG() 함수를 사용해 평균을 구하는 방법이 있습니다.
보통은 대체 공휴일이나, 회사 기준의 휴무일 등을 계산하기 위해 날짜와 관련된 테이블을 회사마다 관리하고 있으니, 업무에 활용하신다면 2번 방법을 활용해보시는 것도 좋을 것 같습니다.
감사합니다.
답변 1