https://leetcode.com/problems/triangle-judgement/description/
Table: Triangle
+-------------+------+
| Column Name | Type |
+-------------+------+
| x | int |
| y | int |
| z | int |
+-------------+------+
In SQL, (x, y, z) is the primary key column for this table.
Each row of this table contains the lengths of three line segments.
Report for every three line segments whether they can form a triangle.
Return the result table in any order.
The result format is in the following example.
Example 1:
Input:
Triangle table:
+----+----+----+
| x | y | z |
+----+----+----+
| 13 | 15 | 30 |
| 10 | 20 | 15 |
+----+----+----+
Output:
+----+----+----+----------+
| x | y | z | triangle |
+----+----+----+----------+
| 13 | 15 | 30 | No |
| 10 | 20 | 15 | Yes |
+----+----+----+----------+
삼각형의 한 변은 나머지 두 변의 길이의 합보다 작아야 하는 조건이 있다.
SELECT *, IF( (x+y>z)AND(y+z>x)AND(z+x>y) , 'Yes', "No" ) triangle
FROM Triangle
생각해보니 CASE WHEN 으로 'No'를 미리 빼는 게 컴퓨터 부담이 덜 갈 것 같았다.
SELECT x,y,z,
CASE
WHEN x+y<=z THEN 'No'
WHEN y+z<=x THEN 'No'
WHEN z+x<=y THEN 'No'
ELSE 'Yes' END AS triangle
FROM Triangle
CASE는 조건을 순차적으로 평가한다. 첫 번째 조건이 만족되면 나머지 조건을 평가하지 않고 바로 결과를 반환함(Short-Circuit Evaluation).
하지만 AND 연산은 (A AND B AND C)와 같이 작성된 경우, A, B, C를 모두 평가해야 최종 결과를 계산할 수 있기 때문에 조건이 많아질수록 연산량이 증가하고, 상대적으로 더 많은 메모리를 사용할 수 있다.