SQL 조회와 일별 집계 — Python 3 + 표준 라이브러리 sqlite3
이 폴더는 m01 data-data-contract solution을 복사하고 pipeline.py와 SQL 테스트를 확장했습니다.
raw, source.json, dictionary.json, question.json, audit.csv, contract.py와 기존 tests는 앞 단계의 검증된 산출물입니다.
1. 이 README가 있는 폴더에서 python3 -m unittest discover -s tests -v
2. starter는 계약 검사는 통과하되 합계 검사 일부가 실패합니다. queries/daily.sql의 집계 함수를 수정합니다. 테스트와 원본을 바꾸지 않습니다.
3. python3 pipeline.py 로 daily.csv 생성. solution의 daily.csv와 비교합니다.
규칙: A/B, 2026-09-01~2026-09-03 양 끝 포함, 지역→날짜 오름차순.
CSV 빈칸은 None→SQL NULL로 적재합니다. 0은 유효합니다.
traffic_raw는 7행/비결측6행/합계470입니다. traffic_unique는 전체 열 완전 일치 중복 제거 후 6행/비결측5행/합계390입니다.
같은 지역·날짜인데 값이 다른 경우 KEY 오류로 멈춥니다. 합산으로 충돌을 숨기지 않습니다.
daily는 미관측 그룹도 남깁니다. A 9월3일 합계 빈칸, 유효 관측0. CSV 빈칸을 0으로 바꾸지 않습니다.
이 모듈의 표는 날씨 결합 전 점검용이며 question.json의 최종 비/무강수 비교표가 아닙니다.
SUM은 NULL을 제외하므로 전체 NULL 그룹 합계는 NULL입니다. 원본 대조는 같은 중복 정책을 적용한 표와 합니다.
다음 모듈에는 이 폴더의 계약 파일·raw·queries·pipeline.py·daily.csv를 함께 전달합니다.
AssertionError는 기대 표와 실제 표의 다른 행/열을 확인합니다. OperationalError: no such column/table은 이름과 적재 테이블을 확인합니다.
TYPE/ValueError는 날짜·정수 변환, RANGE는 음수, KEY는 충돌입니다. 원본을 임의 수정해 통과시키지 않습니다.
