

TRIANGLES 테이블에서 3개의 변을 나타내는 칼럼들을 가지고 조건을 만족하는
1.정삼각형
2.이등변삼각형
3.단순 삼각형
4.삼각형이 형태가 아닌
총 4가지 카테고리로 나눠서 출력하는 쿼리를 작성해보자.
(기본적으로 삼각형은 두 변의 길이의 합이 나머지 한 변의 길이보다 커야함.)
문제풀이 영상 보기 전 나의 쿼리
SELECT CASE
WHEN A = B AND B = C AND A = C THEN 'Equilateral'
WHEN (A = B OR B = C OR A = C)
AND (A + B > C) AND (B + C > A) AND (A + C > B) THEN 'Isosceles'
WHEN A != B AND B != C AND A != C
AND (A + B > C) AND (B + C > A) AND (A + C > B) THEN 'Scalene'
WHEN (A + B <= C) OR (B + C <= A) OR (A + C <= B) THEN 'Not A Triangle'
-- Last code line ELSE 'Not A Triangle' is also possible
END
FROM triangles;
이등변 삼각형과 길이가 모두 다른 삼각형 조건은
어떤 변이 가장 긴 변인지 모르기 때문에 삼각형이 되는 조건을 모두 나열하는 식으로 작성하였다.
백문이불여일타 영상풀이 쿼리
SELECT CASE
WHEN A = B AND B = C THEN 'Equilateral'
WHEN (A + B <= C) OR (B + C <= A) OR (A + C <= B) THEN 'Not A Triangle'
WHEN A = B OR B = C OR A = C THEN 'Isosceles'
ELSE 'Scalene'
END
FROM triangles
Not A Triangle 조건을 먼저 정의해주면서
나머지 삼각형에 대한 조건도 훨씬 더 간결하게 작성할 수 있었던 쿼리다.
직관적으로 봐도 내 쿼리와 조건문 길이 차이가 나는 것을 알 수 있다.
정말 단순하게 삼각형 조건을 모두 나열했기 때문에 쿼리 가독성이 훨신 떨어진다.
Submit 결과 정답으로 처리됐지만 조건을 쿼리로 생각하면서 작성하는데 시간이 오래걸렸고.. 계속 틀려서 여러번 제출했다.
아직 CASE문에 대한 노하우? 조금 더 적응이 필요할 것 같다..!
CASE
WHEN ~ THEN ★ (첫번째 조건에 대한 값)
WHEN ~ THEN ▲(두번째 조건에 대한 값)
....
END
첫번째 WHEN THEN에 대한 결과는 ★으로 정의했기 때문에 다음 줄의 조건에 해당돼도 ★으로 나타남.
즉, CASE문 쓸 때에 WHEN절의 순서를 쓰는 것도 매우 중요하다!
이해를 위해 Type of Triangle 문제로 생각해보면,
정삼각형 ⊂ 이등변삼각형이니깐 이등변 삼각형 조건을 먼저 쓰면 다음 조건으로 정삼각형 조건을 작성하고
해당 조건을 만족해도 정삼각형으로 정의못함.
https://www.hackerrank.com/challenges/what-type-of-triangle/problem?isFullScreen=true
(해당 문제 저작권은 HackerRank에 있습니다.)