작성
·
236
2
Type of Triangle 문제를 아래처럼 풀었는데요,
SELECT CASE
WHEN A = B AND B = C THEN 'Equilateral'
WHEN A = B AND
B != C THEN CASE
WHEN A + B > C AND
B + C > A AND
C + A > B THEN 'Isosceles'
END
WHEN B = C AND
C != A THEN CASE
WHEN A + B > C AND
B + C > A AND
C + A > B THEN 'Isosceles'
END
WHEN C = A AND
A != B THEN CASE
WHEN A + B > C AND
B + C > A AND
C + A > B THEN 'Isosceles'
END
WHEN A != B AND
B != C AND
C != A THEN CASE
WHEN A + B > C AND
B + C > A AND
C + A > B THEN 'Scalene'
END
ELSE 'Not A Triangle'
END, A, B, C
FROM TRIANGLES
각 변의 길이가 20, 20, 40 / 20 12 61 / 20 22 50 일 때는 쿼리에서 정의를 안해준 것으로 해석하고 NULL으로 결과값이 나왔습니다.
Isosceles과 Scalene의 Nested Case 안에서 Else 'Not a Triagle'로 정의를 해주지 않아서 그런 것으로 보이는데, 저는 Else 정의가 없으면 계속 다음 쿼리로 넘어가고 맨 마지막 부분의 ELSE 'Not a Triagle'에서 케이스가 정의되지 않은 부분을 처리할 것으로 생각했거든요.
Nested Case 한 단계 위의 쿼리, 예를 들면
WHEN A != B AND
B != C AND
C != A 에 해당하는 조건이라면 무조건 Nested Case 안으로 넘어가고, 그 안에서 ELSE로 정의해줘야하는건가요?
답변 주시면 감사하겠습니다 :)
답변 1
2
CASE 안에서 정의되지 않은 경우의 수는 NULL이 됩니다.
예외를 지정해주고 싶다면 해당 CASE 안에서 ELSE 를 정의해주셔야 합니다 :)
답변이 충분히 되었을 것 같네요.