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*A*,*B*, and*C*don’t form a triangle.

**Input Format**

The **TRIANGLES** table is described as follows:

Column | Type |
---|---|

A | Integer |

B | Integer |

C | Integer |

Each row in the table denotes the lengths of each of a triangle’s three sides.

**Sample Input**

A | B | C |
---|---|---|

20 | 20 | 23 |

20 | 20 | 20 |

20 | 21 | 22 |

13 | 14 | 30 |

**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

*. Values in the tuple*

**A == B == C****(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

**and**

*A***is not larger than that of side**

*B***.**

*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.

CHANDAN YADAVPLEASE DO EXPLAIN SOLUTION ALSO.

JimI 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.

JimOk, 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

Maro–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

SOLIMANSELECT 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 ðŸ˜€

davidthis 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

davidmy bad

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

mohamed nasrselect

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;

Jawed AliHI,

IF I WRITE ‘NOT A TRIANGLE’ QUERY IN THE LAST LINE THEN IT’S ERROR SHOWING.

COULD SOMEBODY EXPLAIM ME WHY?

Yash SrivastavaBasically, 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.

Pratiksha WaghmodeSELECT 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)

manishinstead of ‘Not a Triangle’ write ‘Not A Triangle’

Yash Srivastava5+510<=15

Correction: 5+5 is 10<=15

Ikramthis 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;