2024_최종모의고사_02회
-5. 과외현황조회 쿼리 0/7
-쿼리 비교 X [과외현황조회] 쿼리 (SELECT 학생.성명, 학생.연락처, 과목.과목명, Max(과외.과외시작일) AS 최근과외시작일, Avg(과외내역.계약수업일수) AS 평균수업일 INTO 조회된과외현황 FROM 과목 INNER JOIN ((학생 INNER JOIN 과외 ON 학생.학생ID = 과외.학생ID) INNER JOIN 과외내역 ON 과외.과외ID = 과외내역.과외ID) ON 과목.과목ID = 과외내역.과목ID GROUP BY 학생.성명, 학생.연락처, 과목.과목명, 학생.성별 HAVING (((학생.성별)=[남자 또는 여자를 입력])); )이 정답(SELECT 학생.성명, 학생.연락처, 과목.과목명, Max(과외.과외시작일) AS 최근과외시작일, Avg(과외내역.계약수업일수) AS 평균수업일 INTO 조회된과외현황 FROM 학생 INNER JOIN (과목 INNER JOIN (과외 INNER JOIN 과외내역 ON 과외.과외ID = 과외내역.과외ID) ON 과목.과목ID = 과외내역.과목ID) ON 학생.학생ID = 과외.학생ID WHERE (((학생.성별)=[남자 또는 여자를 입력])) GROUP BY 학생.성명, 학생.연락처, 과목.과목명; )과 다릅니다.
>>>>왜 틀렸을까요?
안녕하세요.
작성하신 쿼리와 정답 쿼리의 가장 큰 차이는 성별 조건을 HAVING에 넣었는지, WHERE에 넣었는지입니다.
작성하신 쿼리는 학생.성별을 GROUP BY에 포함한 뒤
HAVING 학생.성별=[남자 또는 여자를 입력]
으로 조건을 지정했습니다.
하지만 학생.성별은 Max, Avg와 같은 집계 결과를 대상으로 조건을 지정하는 필드가 아닙니다. 따라서 이 문제에서는 그룹화하기 전에 레코드를 먼저 필터링하도록 다음과 같이 WHERE 절에 조건을 지정해야 합니다.
WHERE 학생.성별=[남자 또는 여자를 입력]
정답에서는 성별을 먼저 WHERE로 필터링한 후, 남은 레코드에 대해 성명, 연락처, 과목명별로 Max(과외시작일)과 Avg(계약수업일수)를 계산합니다.
반면 작성하신 쿼리는 성별까지 그룹화 항목에 추가한 후 HAVING으로 필터링했기 때문에 SQL 구조가 정답과 달라집니다. 실행 결과가 같게 나타나는 경우가 있더라도 채점에서는 정답과 다른 쿼리로 판단될 수 있습니다.
정리하면,
집계하기 전 일반 조건 →
WHERESUM, AVG, COUNT 등의 집계 결과에 대한 조건 →
HAVING
으로 구분해서 사용하면 됩니다.
예를 들어 성별="남자"는 WHERE에 지정하고, AVG(계약수업일수)>=100과 같은 조건은 HAVING에 지정합니다.
따라서 이 문제에서는 학생.성별을 GROUP BY에서 제외하고, 성별 조건을 WHERE 절에 지정해야 합니다.
즐거운 하루 되세요.
-
관리자2026-09-28 16:36:03
안녕하세요.
작성하신 쿼리와 정답 쿼리의 가장 큰 차이는 성별 조건을
HAVING에 넣었는지,WHERE에 넣었는지입니다.작성하신 쿼리는
학생.성별을GROUP BY에 포함한 뒤HAVING 학생.성별=[남자 또는 여자를 입력]으로 조건을 지정했습니다.
하지만
학생.성별은Max,Avg와 같은 집계 결과를 대상으로 조건을 지정하는 필드가 아닙니다. 따라서 이 문제에서는 그룹화하기 전에 레코드를 먼저 필터링하도록 다음과 같이WHERE절에 조건을 지정해야 합니다.WHERE 학생.성별=[남자 또는 여자를 입력]정답에서는 성별을 먼저
WHERE로 필터링한 후, 남은 레코드에 대해 성명, 연락처, 과목명별로Max(과외시작일)과Avg(계약수업일수)를 계산합니다.반면 작성하신 쿼리는 성별까지 그룹화 항목에 추가한 후
HAVING으로 필터링했기 때문에 SQL 구조가 정답과 달라집니다. 실행 결과가 같게 나타나는 경우가 있더라도 채점에서는 정답과 다른 쿼리로 판단될 수 있습니다.정리하면,
집계하기 전 일반 조건 →
WHERESUM, AVG, COUNT 등의 집계 결과에 대한 조건 →
HAVING
으로 구분해서 사용하면 됩니다.
예를 들어
성별="남자"는WHERE에 지정하고,AVG(계약수업일수)>=100과 같은 조건은HAVING에 지정합니다.따라서 이 문제에서는
학생.성별을GROUP BY에서 제외하고, 성별 조건을WHERE절에 지정해야 합니다.즐거운 하루 되세요.