题目描述

(通过次数17,277 | 提交次数27,277,通过率63.34%)

表:Triangle
+-------------+------+
| Column Name | Type |
+-------------+------+
| x           | int  |
| y           | int  |
| z           | int  |
+-------------+------+
(x, y, z)是该表的主键列。
该表的每一行包含三个线段的长度。

写一个SQL查询,每三个线段报告它们是否可以形成一个三角形。
以任意顺序返回结果表。

查询结果格式如下所示。
示例 1:
输入: 
Triangle 表:
+----+----+----+
| x  | y  | z  |
+----+----+----+
| 13 | 15 | 30 |
| 10 | 20 | 15 |
+----+----+----+
输出: 
+----+----+----+----------+
| x  | y  | z  | triangle |
+----+----+----+----------+
| 13 | 15 | 30 | No       |
| 10 | 20 | 15 | Yes      |
+----+----+----+----------+

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/triangle-judgement
//测试数据
Create table If Not Exists Triangle (x int, y int, z int);

insert into Triangle (x, y, z) values ('13', '15', '30');
insert into Triangle (x, y, z) values ('10', '20', '15');

解题思路

Triangle表保存了三个边长。

题目要求:根据三个边长,判断其是否能组成一个三角形。

在数学中,如果三个边长能够组成一个三角形,那么它们必定满足:任意两边之和大于第三边。

我们知道,对于三个边来说,任意两边的组合总共有3种。判断这3种组合是否都满足条件即可。

参考SQL

未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select
    x,
    y,
    z,
    case when (x+y) > z
                and (x+z) > y
                and (y+z) > x
        then 'Yes'
    else 'No' end triangle
from Triangle;
picture loss