책 내용 질문하기
온라인 채점 결과 문의
도서
2026 시나공 컴퓨터활용능력 1급 실기 기출문제집
페이지
0
조회수
40
작성일
2026-08-30
작성자
유*영
첨부파일

2026_최신기출유형_08회

-2. 제품별구매조회 쿼리 0/7

-쿼리 비교 X [제품별구매조회] 쿼리 (SELECT 제품.제품명, Count(구매.구매일자) AS 구매건수, Round(Avg([구매수량]),1) AS 평균구매, Max(구매.[구매금액]) AS 최대금액 INTO 제품별구매내역 FROM 제품 INNER JOIN 구매 ON 제품.제품번호 = 구매.제품번호 GROUP BY 제품.제품명, Right([제조회사],2) HAVING (((Count(구매.구매일자))>=3) AND ((Right([제조회사],2)) In ("전자","통신"))) ORDER BY Max(구매.[구매금액]) DESC; )이 정답(SELECT 제품.제품명, Count(구매.구매일자) AS 구매건수, Round(Avg([구매수량]),1) AS 평균구매, Max(구매.구매금액) AS 최대금액 INTO 제품별구매내역 FROM 제품 INNER JOIN 구매 ON 제품.제품번호 = 구매.제품번호 WHERE (((Right([제조회사],2)) In ("전자","통신"))) GROUP BY 제품.제품명 HAVING (((Count(구매.구매일자))>=3)) ORDER BY Max(구매.구매금액) DESC; )과 다릅니다.


어느 부분이 오답인지 잘 모르겠습니다.

답변
2026-08-31 11:24:07

안녕하세요.

오답의 핵심은 Right([제조회사],2) 조건을 WHERE가 아니라 GROUP BY + HAVING으로 처리한 것입니다.

작성자 쿼리는 다음 구조입니다.

GROUP BY 제품.제품명, Right([제조회사],2)
HAVING Count(구매.구매일자)>=3
   AND Right([제조회사],2) In ("전자","통신")

정답은 다음 구조입니다.

WHERE Right([제조회사],2) In ("전자","통신")
GROUP BY 제품.제품명
HAVING Count(구매.구매일자)>=3

여기서 두 조건의 성격이 다릅니다.

  • Right([제조회사],2) In ("전자","통신")집계하기 전에 개별 레코드를 선별하는 조건이므로 WHERE
  • Count(구매.구매일자)>=3 → 제품별로 묶은 뒤 계산된 구매건수에 대한 조건이므로 HAVING

즉 Access 쿼리 디자인 화면의 요약 행으로 보면 [제조회사]를 이용한 조건 필드는 묶는 방법으로 두는 것이 아니라 **조건(Where)**으로 설정해야 합니다.

작성자 답안에서는 Right([제조회사],2)GROUP BY에 포함했기 때문에 제품을 단순히 제품명으로만 묶는 것이 아니라,

제품명 + 제조회사의 마지막 두 글자

의 조합으로 묶게 됩니다. 따라서 정답과 쿼리 구조가 달라집니다. 데이터에 따라서는 결과까지 달라질 가능성도 있습니다.

올바른 SQL은 정답처럼 다음과 같습니다.

SELECT 제품.제품명,
       Count(구매.구매일자) AS 구매건수,
       Round(Avg([구매수량]),1) AS 평균구매,
       Max(구매.구매금액) AS 최대금액
INTO 제품별구매내역
FROM 제품 INNER JOIN 구매
ON 제품.제품번호 = 구매.제품번호
WHERE Right([제조회사],2) In ("전자","통신")
GROUP BY 제품.제품명
HAVING Count(구매.구매일자)>=3
ORDER BY Max(구매.구매금액) DESC;

따라서 이번 것은 단순한 자동채점상의 표현 차이라기보다는, WHERE에 들어가야 할 조건을 HAVING으로 처리하면서 불필요한 GROUP BY까지 추가한 쿼리 구조상의 오답으로 보는 것이 맞습니다.

쉽게 기억하면 **“원본 필드 조건 → WHERE, Count·Avg·Sum 같은 집계 결과 조건 → HAVING”**으로 구분하시면 됩니다.

즐거운 하루 되세요.

  • 관리자
    2026-08-31 11:24:07

    안녕하세요.

    오답의 핵심은 Right([제조회사],2) 조건을 WHERE가 아니라 GROUP BY + HAVING으로 처리한 것입니다.

    작성자 쿼리는 다음 구조입니다.

    GROUP BY 제품.제품명, Right([제조회사],2)
    HAVING Count(구매.구매일자)>=3
       AND Right([제조회사],2) In ("전자","통신")

    정답은 다음 구조입니다.

    WHERE Right([제조회사],2) In ("전자","통신")
    GROUP BY 제품.제품명
    HAVING Count(구매.구매일자)>=3

    여기서 두 조건의 성격이 다릅니다.

    • Right([제조회사],2) In ("전자","통신")집계하기 전에 개별 레코드를 선별하는 조건이므로 WHERE
    • Count(구매.구매일자)>=3 → 제품별로 묶은 뒤 계산된 구매건수에 대한 조건이므로 HAVING

    즉 Access 쿼리 디자인 화면의 요약 행으로 보면 [제조회사]를 이용한 조건 필드는 묶는 방법으로 두는 것이 아니라 **조건(Where)**으로 설정해야 합니다.

    작성자 답안에서는 Right([제조회사],2)GROUP BY에 포함했기 때문에 제품을 단순히 제품명으로만 묶는 것이 아니라,

    제품명 + 제조회사의 마지막 두 글자

    의 조합으로 묶게 됩니다. 따라서 정답과 쿼리 구조가 달라집니다. 데이터에 따라서는 결과까지 달라질 가능성도 있습니다.

    올바른 SQL은 정답처럼 다음과 같습니다.

    SELECT 제품.제품명,
           Count(구매.구매일자) AS 구매건수,
           Round(Avg([구매수량]),1) AS 평균구매,
           Max(구매.구매금액) AS 최대금액
    INTO 제품별구매내역
    FROM 제품 INNER JOIN 구매
    ON 제품.제품번호 = 구매.제품번호
    WHERE Right([제조회사],2) In ("전자","통신")
    GROUP BY 제품.제품명
    HAVING Count(구매.구매일자)>=3
    ORDER BY Max(구매.구매금액) DESC;

    따라서 이번 것은 단순한 자동채점상의 표현 차이라기보다는, WHERE에 들어가야 할 조건을 HAVING으로 처리하면서 불필요한 GROUP BY까지 추가한 쿼리 구조상의 오답으로 보는 것이 맞습니다.

    쉽게 기억하면 **“원본 필드 조건 → WHERE, Count·Avg·Sum 같은 집계 결과 조건 → HAVING”**으로 구분하시면 됩니다.

    즐거운 하루 되세요.

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