# Type of Triangle in SQL | HackerRank Solution

Hello coders, today we are going to solve Type of Triangle HackerRank Solution in SQL.

## Problem

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 AB, 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 (20, 20, 30) form an Isosceles triangle, because A == B.
Values in the tuple (20, 20, 20) form an Equilateral triangle, because A == B == C. Values in the tuple (20, 21, 22) form a Scalene triangle, because A =! B =! C.
Values in the tuple (13, 14, 30) cannot form a triangle because the combined value of sides A and B is not larger than that of side C.

## Solution – Type of Triangle in SQL

### MySQL

```select if(A+B<=C or B+C<=A or A+C<=B,"Not A Triangle",
if(A=B and B=C,"Equilateral",
if(A=B or B=C or A=C,"Isosceles","Scalene")))
from TRIANGLES as T;
```

Disclaimer: The above Problem (Type of Triangle) is generated by Hacker Rank but the Solution is Provided by CodingBroz. This tutorial is only for Educational and Learning Purpose.

### 14 thoughts on “Type of Triangle in SQL | HackerRank Solution”

1. I entered a solution for mssql into HackerRank for the triangle table
SELECT
case when (A+B<=c or A+C<=B or C+B<=A) then 'Not a Triangle' else
case when (A=B and B=C) then 'Equilateral' else
case when (A=B or B=C or A=C) then 'Isosceles'
else 'Scalene' end end end from triangles;
It said it was wrong. I created the triangles table on my mssql server and entered the example data. It executed and returned the example results. But it keeps saying it is wrong in HackerRank. I do not know why.

2. Ok, I found out why
SELECT
case when (A+B<=c or A+C<=B or C+B<=A) then 'Not a Triangle' else
case when (A=B and B=C) then 'Equilateral' else
case when (A=B or B=C or A=C) then 'Isosceles'
else 'Scalene' end end end from triangles;
does not work it should have been 'Not A Triangle'. capital A

3. –THIS IN MS SQL gave a correct answer
select
case
when ((A+ B <= C) OR (B+C <= A) OR (A+C <= B)) THEN 'Not A Triangle'
when ((A=B) AND (B=C)) then 'Equilateral'
when ((A=B ) OR (B=C ) OR (C=A)) then 'Isosceles'
when (AB AND AC AND BC) AND NOT ((A+ B <= C) OR (B+C <= A) OR (A+C <= B)) then 'Scalene'
end
from Triangles

4. SELECT CASE
WHEN ((A+B<=C) OR (A+C<=B) OR (B+C<=A)) THEN 'Not A Triangle'
WHEN ((A=B) AND (AC)) OR ((A=C) AND (AB)) OR ((B=C) AND (AB)) THEN ‘Isosceles’
WHEN ((A=B) AND (B=C)) THEN ‘Equilateral’
WHEN ((AB) AND (AC) AND (BC)) AND NOT ((A+B<=C) OR (A+C<=B) OR (B+C<=A)) THEN 'Scalene'
END
FROM TRIANGLES;

The correct answer after applying all conditions ðŸ˜€

5. this worked for me

select
–a,b,c ,
case
when ( a = b ) and ( b = c) then ‘Equilateral’
when ((a + b)<= c) or ((b + c)<= a or ((c + a)<= b)) then 'Not A Triangle'
when (a = b) or (b = c) or (c = a) then 'Isosceles'
when (a b) or (b c) or (c a) then ‘Scalene’
end as result
from TRIANGLES

select
–a,b,c ,
case
when ( a = b ) and ( b = c) then ‘Equilateral’
when ((a + b)<= c) or ((b + c)<= a) or ((c + a)<= b) then 'Not A Triangle'
when (a = b) or (b = c) or (c = a) then 'Isosceles'
when (a b) or (b c) or (c a) then ‘Scalene’
end as result
from TRIANGLES

6. mohamed nasr

select
case
when ((A+ B <= C) OR (B+C <= A) OR (A+C <= B)) THEN 'Not A Triangle'
when ((A=B) AND (B=C)) then 'Equilateral'
when ((A=B ) OR (B=C ) OR (C=A)) then 'Isosceles'
when ((A != B) and (B != C) and (A != c)) then 'Scalene'
end
from Triangles;

7. HI,
IF I WRITE ‘NOT A TRIANGLE’ QUERY IN THE LAST LINE THEN IT’S ERROR SHOWING.
COULD SOMEBODY EXPLAIM ME WHY?

1. Yash Srivastava

Basically, you have to keep the ‘Not A Triangle’ query before ‘Isoceles’ query.
Reason: Eg. (5,5,15), now if the ‘Isoceles’ query is before ‘Not A Triangle’ query then the output will be ‘Isoceles’ for this eg. because the compiler will check for A=B, i.e. 5=5 and return the output.
Whereas, such eg. combination will not be a triangle as the Geometrical Law of Triangle says that ‘The sum of the length of the two sides of a triangle cannot be less than or equal to the length of the third side’ and hence the condition for ‘Not A Triangle’ is A+B<=C, i.e.
5+510<=15 which will give a 'Not A Triangle' output.
Hence keeping the 'Not A Triangle' query after the 'Isoceles' query will give you a wrong output or will throw error.
So, considering such combinations, a tester will play with your code and reject it as this test case (5,5,15) fails.

8. Pratiksha Waghmode

SELECT CASE
WHEN A + B <= C OR A + C <= B OR B + C <= A THEN 'Not A Triangle'
WHEN A = B AND B = C THEN 'Equilateral'
WHEN A = B OR B = C OR A = C THEN 'Isosceles'
ELSE 'Scalene'
END
FROM TRIANGLES;
(corrected one)

9. this also works:

select
case
when ( (c>=(a+b)) or (b>=(a+c)) or (a>=(b+c)) ) then ‘Not A Triangle’
when ( (a=b and ac) or (b=c and ba) or (c=a and cb) ) then ‘Isosceles’
when (a=b and b=c) then ‘Equilateral’
else ‘Scalene’
end as triangle_type
from triangles;