개발은 처음이라 개발새발
My SQL CASE문 삼각형 종류 퀴즈로 연습하기[해커랭크] 본문
https://www.hackerrank.com/challenges/what-type-of-triangle/problem?h_r=internal-search
오늘은 삼각형 종류를 지정하는 쿼리로 CASE문 연습을 해보겠습니다. 문제를 보면 A,B,C라는 정수를 담은 컬럼이 있고 이 세 컬럼의 숫자들에 조건을 달아 삼각형의 종류를 지정해보라는 퀴즈입니다.
** 삼각형 종류
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(삼각형X): The given values of A, B, and C don't form a triangle.
요렇게 4가지의 조건을 달아야 합니다.
SELECT CASE
WHEN A=B AND B=C THEN "Equilateral"
END, A,B,C
FROM triangles
우선 제일 쉬운 정삼각형의 조건은 이렇게 짜볼 수 있습니다. 그 다음에 이등변삼각형 조건을 짜보겠습니다.
SELECT CASE
WHEN A=B AND B=C THEN "Equilateral"
WHEN A=B OR B=C OR A=C THEN "Isosceles"
END, A,B,C
FROM triangles
이렇게 이등변까지해서 결과를 보니 8행에 오류가 하나 발견됩니다. 삼각형 결정 조건 중에 "가장 긴 변이 나머지 두변의 합보다 작아야 한다"라는 게 있는데요. 8행의 경우는 자치 이등변삼각형으로 보일 수 있지만 가장 긴 변이(40) 두 변의 합(20+20=40)과 같기에 삼각형이 되면 안됩니다. 이를 해결하기 위해서는 이등변 삼각형 조건보다 삼각형이 아닌 조건을 먼저 적으면 됩니다.
SELECT CASE
WHEN A=B AND B=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"
END, A,B,C
FROM triangles
네, 이렇게 삼각형이 될 수 없는 조건을 이등변 조건보다 먼저 걸어주니 해결이 됐는데요. 이렇게 해결이 된 이유는 CASE문에 여러 조건을 작성하게 되면 조건들이 따로따로 노는 것이 아니라 연쇄적으로 작용하기 때문에 앞에 적은 조건에 해당 로우가 부합이 되면 다음 조건에서는 해당이 되지 않기 때문입니다. 그렇기에 CASE 문을 적을 때에는 어떤 식으로 조건의 순서를 정할지도 매우 중요합니다. 그렇다면 쿼리를 마무리 지어보겠습니다.
SELECT CASE
WHEN A=B AND B=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"
ELSE "Scalene"
END
FROM triangles
정삼각형, 삼각형이 아닌 경우, 이등변삼각형의 조건은 모두 작성했으니 나머지는 모두 그냥 삼각형이겠죠? 이럴 때는 굳이 조건을 적을 필요없이 ELSE를 적으면 됩니다. 이렇게 삼각형 퀴즈를 풀어봤습니다.
'mysql' 카테고리의 다른 글
JOIN을 이용해 대륙별 평균 도시의 인구수를 구하라 [해커랭크] (0) | 2023.05.01 |
---|---|
My SQL CASE문 퀴즈풀기-2 (0) | 2023.04.30 |
해커랭크 Top Earners 문제 풀이 [MySQL] (0) | 2023.04.23 |
[해커랭크] MySQL 집계함수 문제 풀이 (0) | 2023.04.22 |
My SQL 소수점 처리 (0) | 2023.04.22 |