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 sides of equal length.
- Isosceles: It's a triangle with sides of equal length.
- Scalene: It's a triangle with sides of differing lengths.
- Not A Triangle: The given values of A, B, and C don't form a triangle.
Input Format
The TRIANGLES table is described as follows:
Each row in the table denotes the lengths of each of a triangle's three sides.
Sample Input
Sample Output
Isosceles
Equilateral
Scalene
Not A Triangle
Explanation
Values in the tuple form an Isosceles triangle, because .
Values in the tuple form an Equilateral triangle, because . Values in the tuple form a Scalene triangle, because .
Values in the tuple cannot form a triangle because the combined value of sides and is not larger than that of side .
Problem
A,B,C 세변의 길이가 변수로 주어지고,
4가지 조건에 따라 값을 반환하라.
- 정삼각형: 세 변의 길이가 같은 삼각형
- 이등변삼각형: 2변의 길이가 같은 삼각형
- 부등변삼각형: 3변의 길이가 모두 다른 삼각형
- 삼각형이 아닌: A,B,C가 삼각형이 만들어질 수 없는 조건일 때
Answer1
SELECT (CASE WHEN T.A+T.B+T.C - IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C)
<= IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C) THEN 'Not A Triangle'
WHEN T.A = T.B AND T.B = T.C THEN 'Equilateral'
WHEN T.A = T.B OR T.B = T.C OR T.A = T.C THEN 'Isosceles'
ELSE 'Scalene' END) AS triangle
FROM TRIANGLES T
이 방법은 너무 무식한 것 같고 다른 효율적인 쿼리문이 있을 거라 생각한다.
같은 연산을 저렇게 반복하는 건 불편하고 부끄럽고 꺼림직하다.
How to solve
SELECT (CASE WHEN T.A+T.B+T.C - IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C)
< IF(IF(T.A > T.B, T.A, T.B)> T.C, IF(T.A > T.B, T.A, T.B), T.C) THEN 'Not A Triangle'
WHEN T.A = T.B AND T.B = T.C THEN 'Equilateral'
WHEN T.A = T.B OR T.B = T.C OR T.A = T.C THEN 'Isosceles'
ELSE 'Scalene' END) AS triangle
FROM TRIANGLES T
방법은 여러가지가 있겠지만 그나마 가장 익숙한 CASE함수를 사용해 쿼리문을 작성했다.
그런데 결과는 실패!
실패도 실패인데, 일단 첫번째 WHEN 구문부터 엉망이다.
저렇게 쓰는게 아닐건데 라는 생각이 마구 든다....
원인은 의외로 간단했는데, 그건 내 수학실력도 엉망이었기 때문이다.
삼각형이 아닌 조건에서 가장 큰 변이 나머지 두 변의 길이의 합보다 크거나 같을 때인데,
저기서 같거나 조건을 쓰지 않았다.
부끄럽네...
'데이터 > SQL 문제풀이' 카테고리의 다른 글
HackerRank SQL - The PADS (0) | 2023.01.03 |
---|---|
Weather Observation Station 18 (0) | 2022.11.15 |
HackerRank SQL - Higher Than 75 Marks (0) | 2022.11.01 |
HackerRank SQL - The Blunder (0) | 2022.11.01 |
[MySQL] HackerRank SQL - Weather Observation Station 10 (0) | 2022.10.20 |
댓글