책 내용 질문하기
온라인 채점 결과 문의
도서
2024 시나공 컴퓨터활용능력 1급 실기 총정리
페이지
0
조회수
67
작성일
2026-09-28
작성자
김*철
첨부파일

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 학생.성명, 학생.연락처, 과목.과목명; )과 다릅니다.


>>>>왜 틀렸을까요?


답변
2026-09-28 16:36:03

안녕하세요.

작성하신 쿼리와 정답 쿼리의 가장 큰 차이는 성별 조건을 HAVING에 넣었는지, WHERE에 넣었는지입니다.

작성하신 쿼리는 학생.성별을 GROUP BY에 포함한 뒤

HAVING 학생.성별=[남자 또는 여자를 입력]

으로 조건을 지정했습니다.

하지만 학생.성별은 Max, Avg와 같은 집계 결과를 대상으로 조건을 지정하는 필드가 아닙니다. 따라서 이 문제에서는 그룹화하기 전에 레코드를 먼저 필터링하도록 다음과 같이 WHERE 절에 조건을 지정해야 합니다.

WHERE 학생.성별=[남자 또는 여자를 입력]

정답에서는 성별을 먼저 WHERE로 필터링한 후, 남은 레코드에 대해 성명, 연락처, 과목명별로 Max(과외시작일)과 Avg(계약수업일수)를 계산합니다.

반면 작성하신 쿼리는 성별까지 그룹화 항목에 추가한 후 HAVING으로 필터링했기 때문에 SQL 구조가 정답과 달라집니다. 실행 결과가 같게 나타나는 경우가 있더라도 채점에서는 정답과 다른 쿼리로 판단될 수 있습니다.

정리하면,

  • 집계하기 전 일반 조건 → WHERE

  • SUM, 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 구조가 정답과 달라집니다. 실행 결과가 같게 나타나는 경우가 있더라도 채점에서는 정답과 다른 쿼리로 판단될 수 있습니다.

    정리하면,

    • 집계하기 전 일반 조건 → WHERE

    • SUM, AVG, COUNT 등의 집계 결과에 대한 조건 → HAVING

    으로 구분해서 사용하면 됩니다.

    예를 들어 성별="남자"는 WHERE에 지정하고, AVG(계약수업일수)>=100과 같은 조건은 HAVING에 지정합니다.

    따라서 이 문제에서는 학생.성별을 GROUP BY에서 제외하고, 성별 조건을 WHERE 절에 지정해야 합니다.

    즐거운 하루 되세요.

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.