문제
Write a query identifying the type of each record in the TRIANGLES table using its three side lengths. Output one of the following statements for each record in the table:
- Equilateral: It's a triangle with 3 sides of equal length.
- Isosceles: It's a triangle with 2 sides of equal length.
- Scalene: It's a triangle with 3 sides of differing lengths.
- Not A Triangle: The given values of A, B, and C don't form a triangle.
설명
풀이
- 이 문제를 풀기 위해서는 'CASE WHEN 구문은 작성된 순서대로 실행된다'는 점을 반드시 알아야 한다.
- 문제와 설명 부분에서는 'Not a Triangle'에 대한 설명을 마지막에 써두었지만, 이를 쿼리로 작성할 때도 마지막에 작성하면, 오답이다.
- Not a Triangle에 포함되는 레코드와 Isosceles, Scalene에 포함되는 레코드는 교집합이 있을 수 있기 때문이다.
- 따라서 가장 명확하게 필터링 할 수 있는 조건부터 먼저 적는 게 데이터를 정확하게 변환할 수 있는 방법이다.
SELECT CASE WHEN A = B AND B = C AND A = C THEN 'Equilateral'
WHEN A + B <= C OR A + C <= B OR B + C <= A THEN 'Not A Triangle'
WHEN A = B OR B = C OR A = C THEN 'Isosceles'
WHEN A != B AND B != C AND A != C THEN 'Scalene'
END AS type
FROM TRIANGLES