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

2026_테이블 생성 쿼리_문제 24

-판매직원수당조회 쿼리 0/100

-쿼리 비교 X [판매직원수당조회] 쿼리 (SELECT 주문2.판매직원, Count(주문2.주문번호) AS 총주문수, Switch([총주문수]<5,10000,[총주문수]>=5,20000,[총주문수]<20,20000,[총주문수]>=20,50000) AS 추가수당, [총주문수]*10000+[추가수당] AS 판매수당 INTO 판매직원수당확인 FROM 상품2 INNER JOIN 주문2 ON 상품2.상품코드 = 주문2.상품코드 WHERE (((Mid([센서],2,1)) In ("C","O")) AND ((주문2.구매평점)>=20)) GROUP BY 주문2.판매직원; )이 정답(SELECT 주문2.판매직원, Count(주문2.주문번호) AS 총주문수, Switch([총주문수]<5,10000,[총주문수]<20,20000,[총주문수]>=20,50000) AS 추가수당, [총주문수]*10000+[추가수당] AS 판매수당 INTO 판매직원수당확인 FROM 상품2 INNER JOIN 주문2 ON 상품2.상품코드 = 주문2.상품코드 WHERE (((Mid([센서],2,1)) In ("C","O")) AND ((주문2.구매평점)>=20)) GROUP BY 주문2.판매직원; )과 다릅니다.


이거를 보면 쿼리 필드명에 Switch 함수 사용할때 5이상 20미만이라는 조건에 있어서


Switch([총주문수]<5,10000,[총주문수]<20,20000,[총주문수]>=20,50000)


Switch([총주문수]<5,10000,[총주문수]>=5,20000,[총주문수]<20,20000,[총주문수]>=20,50000)


즉, 5이상 20미만이라는 조건을 저는 풀어서 썼고 정답은 묶어서 썼는데 결과는 같더라도 이렇게 풀면 실제 시험장에서도 틀리나요 ?

답변
2026-09-02 09:09:45

안녕하세요.

이번 경우는 결과가 같은 표현 차이가 아니라, 작성하신 Switch 식이 실제로 논리적으로 잘못되었습니다. 따라서 실제 시험에서도 오답이 될 수 있습니다.

정답은 다음과 같습니다.

Switch(
    [총주문수]<5, 10000,
    [총주문수]<20, 20000,
    [총주문수]>=20, 50000
)

Switch 함수는 왼쪽부터 조건을 검사해서 처음으로 참(True)이 된 값만 반환합니다. 따라서 정답의 두 번째 조건 [총주문수]<20은 앞의 [총주문수]<5가 이미 걸러졌기 때문에 실질적으로는

5 이상 20 미만

을 의미합니다.

예를 들어 총주문수가 10이면 <5는 거짓, <20은 참이므로 20,000원이 됩니다. 총주문수가 25이면 <5 거짓, <20 거짓, >=20 참이므로 50,000원이 됩니다.

그런데 작성하신 식은

Switch(
    [총주문수]<5,10000,
    [총주문수]>=5,20000,
    [총주문수]<20,20000,
    [총주문수]>=20,50000
)

입니다. 여기서는 [총주문수]>=5가 너무 넓은 조건입니다. 총주문수가 25인 경우에도 >=5가 참이므로 그 자리에서 20,000원을 반환하고 이후의 [총주문수]>=20,50000까지는 검사하지 않습니다.

즉 다음처럼 됩니다.

총주문수정답작성자 식
310,00010,000
1020,00020,000
1920,00020,000
2050,00020,000
3050,00020,000

정말로 5 이상 20 미만을 조건에 풀어서 쓰고 싶다면 다음처럼 두 조건을 AND로 묶어야 합니다.

Switch(
    [총주문수]<5,10000,
    [총주문수]>=5 And [총주문수]<20,20000,
    [총주문수]>=20,50000
)

이 식은 정답과 논리적으로 같습니다.

다만 Switch에서는 앞의 조건이 이미 범위를 걸러주기 때문에 정답처럼

Switch([총주문수]<5,10000,
       [총주문수]<20,20000,
       [총주문수]>=20,50000)

라고 쓰는 것이 가장 간단하고 안전합니다.

핵심은 Switch는 모든 조건을 독립적으로 보는 것이 아니라 위에서부터 첫 번째 참 조건에서 종료된다는 점입니다. 이번 오답은 자동채점의 구조 차이가 아니라 실제 계산 결과가 달라질 수 있는 논리 오류입니다.

즐거운 하루 되세요.

  • 관리자
    2026-09-02 09:09:45

    안녕하세요.

    이번 경우는 결과가 같은 표현 차이가 아니라, 작성하신 Switch 식이 실제로 논리적으로 잘못되었습니다. 따라서 실제 시험에서도 오답이 될 수 있습니다.

    정답은 다음과 같습니다.

    Switch(
        [총주문수]<5, 10000,
        [총주문수]<20, 20000,
        [총주문수]>=20, 50000
    )

    Switch 함수는 왼쪽부터 조건을 검사해서 처음으로 참(True)이 된 값만 반환합니다. 따라서 정답의 두 번째 조건 [총주문수]<20은 앞의 [총주문수]<5가 이미 걸러졌기 때문에 실질적으로는

    5 이상 20 미만

    을 의미합니다.

    예를 들어 총주문수가 10이면 <5는 거짓, <20은 참이므로 20,000원이 됩니다. 총주문수가 25이면 <5 거짓, <20 거짓, >=20 참이므로 50,000원이 됩니다.

    그런데 작성하신 식은

    Switch(
        [총주문수]<5,10000,
        [총주문수]>=5,20000,
        [총주문수]<20,20000,
        [총주문수]>=20,50000
    )

    입니다. 여기서는 [총주문수]>=5가 너무 넓은 조건입니다. 총주문수가 25인 경우에도 >=5가 참이므로 그 자리에서 20,000원을 반환하고 이후의 [총주문수]>=20,50000까지는 검사하지 않습니다.

    즉 다음처럼 됩니다.

    총주문수정답작성자 식
    310,00010,000
    1020,00020,000
    1920,00020,000
    2050,00020,000
    3050,00020,000

    정말로 5 이상 20 미만을 조건에 풀어서 쓰고 싶다면 다음처럼 두 조건을 AND로 묶어야 합니다.

    Switch(
        [총주문수]<5,10000,
        [총주문수]>=5 And [총주문수]<20,20000,
        [총주문수]>=20,50000
    )

    이 식은 정답과 논리적으로 같습니다.

    다만 Switch에서는 앞의 조건이 이미 범위를 걸러주기 때문에 정답처럼

    Switch([총주문수]<5,10000,
           [총주문수]<20,20000,
           [총주문수]>=20,50000)

    라고 쓰는 것이 가장 간단하고 안전합니다.

    핵심은 Switch는 모든 조건을 독립적으로 보는 것이 아니라 위에서부터 첫 번째 참 조건에서 종료된다는 점입니다. 이번 오답은 자동채점의 구조 차이가 아니라 실제 계산 결과가 달라질 수 있는 논리 오류입니다.

    즐거운 하루 되세요.

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