Type of Triangle in SQL | HackerRank Solution

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

Type of Triangle 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:

ColumnType
AInteger
BInteger
CInteger

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

Sample Input

ABC
202023
202020
202122
131430

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.

13 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

    1. my 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

  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)

Leave a Comment

Your email address will not be published. Required fields are marked *