https://www.hackerrank.com/challenges/what-type-of-triangle/problem?h_r=internal-search

맨 처음 시도
SELECT CASE
WHEN A = B = C THEN 'Equilateral'
WHEN A = B OR B = C OR A = C THEN 'Isosceles'
WHEN A + B < C OR A + C < B OR C + B < A THEN 'Not A Triangle'
WHEN A /= B /= C THEN 'Scalene'
END, *
FROM TRIANGLES
A = B AND B = C 대신 A = B = C와 같이 사용할 수 없음을 알게 되었다!
두 가지 이상의 조건을 적을 때는 AND 또는 OR 연산자를 이용해 연결해야 한다.
CASE 조건문을 쓸 때는 '작성 순서'에 유의해야 한다.
문제에 제시된 삼각형의 정의 및 구분은 아래와 같음
CASE 조건문은 작성 순서에 따라 순차적으로 처리가 된다.
만약 첫번째 조건에서 A로 필터링이 되었다면, 두번째 조건을 만족하더라도 계속해서 A로 남는다.
만약 세 변이 (3, 3, 3)인 삼각형이 있다고 했을 때,
이등변 삼각형의 조건인 '두 변이 같다'도 충족하므로
위 조건을 먼저 작성할 경우 '이등변 삼각형'으로 필터링 된다.
SELECT CASE
WHEN A = B OR B = C OR A = C THEN 'Isosceles'
WHEN A = B AND B = C THEN 'Equilateral'
ELSE 'Others'
END
FROM Triangles
-> 세 변이 (3,3,3)인 삼각형은 먼저 걸린 조건을 만족하므로 Isosceles로 구분된다.
따라서 아래와 같이
(1)정삼각형을 먼저 조건에 걸고, (2)이등변 삼각형의 조건을 걸어주면 된다.
SELECT CASE
WHEN A = B AND B = C THEN 'Equilateral'
WHEN A = B OR B = C OR A = C THEN 'Isosceles'
ELSE 'Others'
END
FROM Triangles
그 다음으로 세 변이 (20, 20, 40)인 삼각형이 있다고 했을 때,
이등변 삼각형의 조건인 '두 변이 같다'를 충족하지만
삼각형이 될 수 있는 조건을 만족하지 못한다. -> 따라서 이 조건을 먼저 걸어줘야 함!!!
(두 변의 합이 나머지 한 변보다 작거나 같을 때 삼각형이 될 수 없음)
따라서 문제에서 원하는 조건을 위한 순서를 작성해보자면 아래와 같다
1. 정삼각형 먼저
2. 삼각형이 될 수 없는 경우
3. 이등변 삼각형
4. 나머지는 그냥 삼각형으로 구분
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
TIPS
그런데!!!!!!!! 문제가 있다
이렇게 쿼리를 써서 냈는데 (뭐가 잘못됐나 싶어서 계속 다시보고 강사님이 수업에서 쓰신 코드랑 똑!!같!!이!! 씀)
계속 오류가 남....ㅋ

무엇이 문제인지 알 수가 없어서 몇 번이고 다시 쳐봤고
혹시 탭 버튼을 사용하면 안되는건가 하고 별 생각을 다해봄 ㅋㅋㅋㅋㅋ
하지만 아직도 원인을 알 수 없다...
결국 슬랙에 질문을 남겼는데 바로 위에 보니까 나와 같은 문제를 갖고 계신 분이 계셨다 ㅠㅠ
우선은 답변을 기다려보고 다음 문제로 넘어가야겠다
+
선생님께 답변을 받기로, '해커랭크에서 CASE문과 같이 직접 가공한 컬럼에 alias로 별칭을 주지 않으면 작동하지 않도록 시스템을 구축, 강의 촬영 시점과 달라진 부분인 것 같다'고 해주셨다.
결론적으로 SELECT CASE WHEN ~ END AS A로 작성해보라고 하셨음
그래서, 아래와 같은 코드로 다시 시도했더니 아주 잘 된다.
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 AS A
FROM Triangles