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미만이라는 조건을 저는 풀어서 썼고 정답은 묶어서 썼는데 결과는 같더라도 이렇게 풀면 실제 시험장에서도 틀리나요 ?
안녕하세요.
이번 경우는 결과가 같은 표현 차이가 아니라, 작성하신 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까지는 검사하지 않습니다.
즉 다음처럼 됩니다.
| 총주문수 | 정답 | 작성자 식 |
|---|---|---|
| 3 | 10,000 | 10,000 |
| 10 | 20,000 | 20,000 |
| 19 | 20,000 | 20,000 |
| 20 | 50,000 | 20,000 |
| 30 | 50,000 | 20,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까지는 검사하지 않습니다.즉 다음처럼 됩니다.
총주문수 정답 작성자 식 3 10,000 10,000 10 20,000 20,000 19 20,000 20,000 20 50,000 20,000 30 50,000 20,000 정말로
5 이상 20 미만을 조건에 풀어서 쓰고 싶다면 다음처럼 두 조건을 AND로 묶어야 합니다.Switch( [총주문수]<5,10000, [총주문수]>=5 And [총주문수]<20,20000, [총주문수]>=20,50000 )이 식은 정답과 논리적으로 같습니다.
다만
Switch에서는 앞의 조건이 이미 범위를 걸러주기 때문에 정답처럼Switch([총주문수]<5,10000, [총주문수]<20,20000, [총주문수]>=20,50000)라고 쓰는 것이 가장 간단하고 안전합니다.
핵심은 Switch는 모든 조건을 독립적으로 보는 것이 아니라 위에서부터 첫 번째 참 조건에서 종료된다는 점입니다. 이번 오답은 자동채점의 구조 차이가 아니라 실제 계산 결과가 달라질 수 있는 논리 오류입니다.
즐거운 하루 되세요.