2026_기본모의고사_04회
-5. 대여기간구분별현황 쿼리 0/7
-쿼리 비교 X [대여기간구분별현황] 쿼리 (SELECT IIf(Left([대여기간],1)*1>=3,"장기대여","단기대여") AS 구분, Avg(도서목록.가격) AS 평균도서가격, Avg(도서목록.대여금액) AS 평균대여금액 FROM 도서목록 GROUP BY IIf(Left([대여기간],1)*1>=3,"장기대여","단기대여"); )이 정답(SELECT IIf(Left([대여기간],1)>=3,"장기대여","단기대여") AS 구분, Avg(도서목록.가격) AS 평균도서가격, Avg(도서목록.대여금액) AS 평균대여금액 FROM 도서목록 GROUP BY IIf(Left([대여기간],1)>=3,"장기대여","단기대여"); )과 다릅니다.
IIf(Left([대여기간],1)>=3,"장기대여","단기대여") 이 부분에서
Left에서 나온 값은 텍스트 취급이기에 *1을 사용하여 숫자 취급을 해야되는거 아닌가요?
IIf(Left([대여기간],1)*1>=3,"장기대여","단기대여") 이렇게 사용하여도 실행화면에서는 정답과 같이 나오는데 이렇게 쓰면 안되는 건가요?
안녕하세요.
네. Left 함수의 반환값은 문자열이므로,
Left([대여기간],1)*1처럼 *1을 하여 숫자로 변환하려고 생각하신 것은 논리적으로 타당합니다.
다만 이 문제에서는 *1이 필요하지 않습니다. Access가 다음 비교를 처리할 때
Left([대여기간],1)>=3오른쪽의 3이 숫자이므로, "3", "4"처럼 숫자로 변환 가능한 문자열을 숫자로 암시적 형 변환하여 비교할 수 있기 때문입니다.
따라서 예를 들어 대여기간="3개월"이라면:
Left("3개월",1) → "3"
"3" >= 3 → Access에서 정상 비교 → True질문하신
IIf(Left([대여기간],1)*1>=3,"장기대여","단기대여")도 이 데이터에서는 동일한 결과가 나오므로 논리적으로 잘못된 식은 아닙니다. *1은 명시적으로 숫자로 변환하는 역할만 추가한 것입니다.
다만 문제에서 별도로 숫자 변환을 요구하지 않았고 교재 자동 채점은 식 자체를 비교하기 때문에 오답으로 표시된 것입니다. 실제 시험 대비에서는 불필요한 *1을 추가하지 않고 정답처럼 작성하는 것이 가장 안전합니다.
참고로 명시적으로 형 변환해야 하는 상황이라면 *1뿐 아니라 Val() 등의 방법도 있지만, 지정 함수가 있는 시험 문제에서는 제시된 함수만 사용하는 것을 우선하시면 됩니다.
즐거운 하루 되세요.
-
관리자2026-08-24 09:37:48
안녕하세요.
네.
Left함수의 반환값은 문자열이므로,Left([대여기간],1)*1처럼
*1을 하여 숫자로 변환하려고 생각하신 것은 논리적으로 타당합니다.다만 이 문제에서는
*1이 필요하지 않습니다. Access가 다음 비교를 처리할 때Left([대여기간],1)>=3오른쪽의
3이 숫자이므로,"3","4"처럼 숫자로 변환 가능한 문자열을 숫자로 암시적 형 변환하여 비교할 수 있기 때문입니다.따라서 예를 들어
대여기간="3개월"이라면:Left("3개월",1) → "3" "3" >= 3 → Access에서 정상 비교 → True질문하신
IIf(Left([대여기간],1)*1>=3,"장기대여","단기대여")도 이 데이터에서는 동일한 결과가 나오므로 논리적으로 잘못된 식은 아닙니다.
*1은 명시적으로 숫자로 변환하는 역할만 추가한 것입니다.다만 문제에서 별도로 숫자 변환을 요구하지 않았고 교재 자동 채점은 식 자체를 비교하기 때문에 오답으로 표시된 것입니다. 실제 시험 대비에서는 불필요한
*1을 추가하지 않고 정답처럼 작성하는 것이 가장 안전합니다.참고로 명시적으로 형 변환해야 하는 상황이라면
*1뿐 아니라Val()등의 방법도 있지만, 지정 함수가 있는 시험 문제에서는 제시된 함수만 사용하는 것을 우선하시면 됩니다.즐거운 하루 되세요.