题目
表: Triangle
写一个SQL查询,每三个线段报告它们是否可以形成一个三角形。
以 任意顺序 返回结果表。
查询结果格式如下所示。
示例 1:
解题思路
前置知识
CASE函数
CASE具有两种格式,简单CASE函数和CASE搜索函数。这两种方式,大部分情况下可以实现相同的功能。
简单CASE函数
语法:
CASE column
WHEN <condition> THEN value
WHEN <condition> THEN value
......
ELSE value END
示例:
CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END
CASE搜索函数
语法:
CASE
WHEN <condition> [,<condition>] THEN value
WHEN <condition> [,<condition>] THEN value
......
ELSE value END
示例:
CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
简单CASE 函数重在简洁,但是它只适用于这种单字段的单值比较,而CASE 搜索函数的优点在于适用于所有比较(包括多值比较)的情况。
例如:
CASE WHEN sex = '1' AND age>18 THEN '成年男性' WHEN sex = '2' AND age>18 THEN '成年女性' ELSE '其他' END
注意:CASE函数只返回第一个符合条件的值,剩下的CASE部分将会被自动忽略。比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN Type IN ('a','b') THEN '第一类' WHEN Type IN ('a') THEN '第二类' ELSE '其他类' END
知道了case函数后我们来解决这个问题
1.题目要求我们判断三个线段报告它们是否可以形成一个三角形,可以形成三角形的条件是两边之和大于第三边,此时我们用case函数进行判断,when x+y>z and x+z>y and y+z>x 时,表明这组线段可以形成三角形,我们就返回Yes,否则我们返回No即可。
代码实现
select x,y,z,
(case when x+y>z and x+z>y and y+z>x then 'Yes' else 'No' end) as triangle
from triangle;
测试结果