2026_실전모의고사_C형
-1. 판매현황생성 쿼리 0/7
-쿼리 비교 X [판매현황생성] 쿼리 (SELECT 판매종합.판매일, 판매종합.제품명, 판매종합.영업사원, Sum(판매종합.판매수량) AS 총판매량 INTO 조회지점판매현황 FROM 판매종합 WHERE (((판매종합.지점명) Like "*" & [조회할 지점명의 일부를 입력] & "*")) GROUP BY 판매종합.판매일, 판매종합.제품명, 판매종합.영업사원; )이 정답(SELECT 판매종합.판매일, 판매종합.제품명, 판매종합.영업사원, Sum(판매종합.판매수량) AS 총판매량 INTO 조회지점판매현황 FROM 판매종합 GROUP BY 판매종합.판매일, 판매종합.제품명, 판매종합.영업사원, 판매종합.지점명 HAVING (((판매종합.지점명) Like "*" & [조회할 지점명의 일부를 입력] & "*")); )과 다릅니다.
이게 쿼리 디자인에서 '지점명' 필드의 요약탭을 "묶는 방법"으로 설정하냐 "식"으로 설정하냐에 따라 SQL문이 달라지는 것 같은데 실제로 틀린 것인지 모르겠습니다
안녕하세요.
네. 이 경우에는 단순히 SQL 표현만 다른 것이 아니라 두 쿼리의 그룹화 기준이 실제로 다르기 때문에 완전히 같은 쿼리라고 볼 수 없습니다.
사용자 쿼리는 다음 구조입니다.
FROM 판매종합
WHERE 지점명 Like "*" & [조회할 지점명의 일부를 입력] & "*"
GROUP BY 판매일, 제품명, 영업사원;즉 먼저 WHERE에서 해당 지점의 레코드만 골라낸 다음,
판매일 + 제품명 + 영업사원기준으로 묶어서 판매수량을 합산합니다.
반면 정답은
GROUP BY 판매일, 제품명, 영업사원, 지점명
HAVING 지점명 Like "*" & [조회할 지점명의 일부를 입력] & "*";입니다. 즉 지점명까지 그룹화 기준에 포함시킨 뒤, 그 그룹에 대해 HAVING 조건을 적용합니다.
예를 들어 같은 날 같은 제품을 같은 영업사원이 두 지점에서 판매했다고 가정해 보겠습니다.
판매일 제품명 영업사원 지점명 판매수량
9/1 A 김영수 서울강남점 10
9/1 A 김영수 서울서초점 20검색어로 서울을 입력하면 사용자 쿼리는 두 행을 먼저 찾은 뒤 판매일+제품명+영업사원으로 묶으므로
9/1 / A / 김영수 → 30한 행으로 합산됩니다.
하지만 정답 쿼리는 지점명까지 그룹화하므로 내부적으로
9/1 / A / 김영수 / 서울강남점 → 10
9/1 / A / 김영수 / 서울서초점 → 20처럼 서로 다른 두 그룹으로 유지됩니다.
따라서 현재 데이터나 입력값에 따라 결과가 우연히 같을 수는 있지만, 일반적으로는 동일한 의미가 아닙니다.
그리고 디자인 보기에서 중요한 부분은 말씀하신 대로 지점명 필드의 요약 설정입니다. 정답처럼 SQL을 만들려면 지점명을 디자인 그리드에 추가하고
필드 : 지점명
요약 : 묶는 방법
표시 : 해제
조건 : Like "*" & [조회할 지점명의 일부를 입력] & "*"로 설정해야 합니다. 그러면 지점명이 GROUP BY에 포함되고 조건은 HAVING으로 만들어집니다.
반대로 지점명의 요약을 조건(Where) 으로 설정하면 SQL은 질문자분처럼 WHERE 절에 들어가고 지점명은 GROUP BY에 포함되지 않습니다.
참고로 식(Expression)은 이번 경우에 사용하는 옵션이 아닙니다. 식은 집계 결과 등을 이용한 계산 필드에 주로 사용합니다.
따라서 이 문제에서는 정답과 동일하게 지점명의 요약을 ‘묶는 방법’으로 설정하는 것이 맞고, 질문자 쿼리는 현재 데이터에서 같은 결과가 나올 수 있어도 정답 쿼리와 논리적으로 완전히 동일하지 않으므로 채점에서 틀린 것으로 처리될 수 있습니다.
즐거운 하루 되세요.
-
관리자2026-09-09 10:06:18
안녕하세요.
네. 이 경우에는 단순히 SQL 표현만 다른 것이 아니라 두 쿼리의 그룹화 기준이 실제로 다르기 때문에 완전히 같은 쿼리라고 볼 수 없습니다.
사용자 쿼리는 다음 구조입니다.
FROM 판매종합 WHERE 지점명 Like "*" & [조회할 지점명의 일부를 입력] & "*" GROUP BY 판매일, 제품명, 영업사원;즉 먼저
WHERE에서 해당 지점의 레코드만 골라낸 다음,판매일 + 제품명 + 영업사원기준으로 묶어서 판매수량을 합산합니다.
반면 정답은
GROUP BY 판매일, 제품명, 영업사원, 지점명 HAVING 지점명 Like "*" & [조회할 지점명의 일부를 입력] & "*";입니다. 즉 지점명까지 그룹화 기준에 포함시킨 뒤, 그 그룹에 대해
HAVING조건을 적용합니다.예를 들어 같은 날 같은 제품을 같은 영업사원이 두 지점에서 판매했다고 가정해 보겠습니다.
판매일 제품명 영업사원 지점명 판매수량 9/1 A 김영수 서울강남점 10 9/1 A 김영수 서울서초점 20검색어로
서울을 입력하면 사용자 쿼리는 두 행을 먼저 찾은 뒤판매일+제품명+영업사원으로 묶으므로9/1 / A / 김영수 → 30한 행으로 합산됩니다.
하지만 정답 쿼리는
지점명까지 그룹화하므로 내부적으로9/1 / A / 김영수 / 서울강남점 → 10 9/1 / A / 김영수 / 서울서초점 → 20처럼 서로 다른 두 그룹으로 유지됩니다.
따라서 현재 데이터나 입력값에 따라 결과가 우연히 같을 수는 있지만, 일반적으로는 동일한 의미가 아닙니다.
그리고 디자인 보기에서 중요한 부분은 말씀하신 대로
지점명필드의 요약 설정입니다. 정답처럼 SQL을 만들려면지점명을 디자인 그리드에 추가하고필드 : 지점명 요약 : 묶는 방법 표시 : 해제 조건 : Like "*" & [조회할 지점명의 일부를 입력] & "*"로 설정해야 합니다. 그러면
지점명이GROUP BY에 포함되고 조건은HAVING으로 만들어집니다.반대로
지점명의 요약을 조건(Where) 으로 설정하면 SQL은 질문자분처럼WHERE절에 들어가고지점명은 GROUP BY에 포함되지 않습니다.참고로
식(Expression)은 이번 경우에 사용하는 옵션이 아닙니다.식은 집계 결과 등을 이용한 계산 필드에 주로 사용합니다.따라서 이 문제에서는 정답과 동일하게
지점명의 요약을 ‘묶는 방법’으로 설정하는 것이 맞고, 질문자 쿼리는 현재 데이터에서 같은 결과가 나올 수 있어도 정답 쿼리와 논리적으로 완전히 동일하지 않으므로 채점에서 틀린 것으로 처리될 수 있습니다.즐거운 하루 되세요.