You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:HackerRank SQL进阶题三角形类型判断语句错误排查

三角形类型判断SQL语句的错误分析

需求说明

根据TRIANGLES表中每条记录的三条边长(A、B、C),判断并输出对应的三角形类型,结果只能是以下四种之一:

  • Equilateral(等边三角形):三条边长完全相等
  • Isosceles(等腰三角形):恰好有两条边长相等
  • Scalene(不等边三角形):三条边长均不相等且能构成三角形
  • Not A Triangle(非三角形):三边无法满足三角形构成条件(任意两边之和不大于第三边)

待分析的错误SQL语句

select if(a=b=c,'Equilateral', 
      (select if(a=b or b=c or c=a,'Isosceles', select if( a+b Triangle','Scalene')))) 
       from triangles;

存在的错误点

  • 连续等号语法错误:SQL不支持a=b=c这种连续判断三者相等的写法,正确的三者相等判断应该是a = b AND b = c。
  • 嵌套IF的语法混乱:
    • 第三层IF的条件完全缺失,原代码里的a+b Triangle是明显的输入错误,本该是判断三边能否构成三角形的条件(比如a + b > c AND a + c > b AND b + c > a)。
    • 嵌套IF不需要用select包裹,多余的子查询写法会直接导致语法报错。
  • 判断逻辑顺序颠倒:应该优先判断是否能构成三角形,再去区分三角形类型。原代码先判断等边、等腰,最后才处理非三角形的情况,会导致那些根本构不成三角形的记录被错误归类为等腰或不等边。
  • 等腰判断的逻辑冗余(次要):虽然原代码先判断了等边,所以等腰的条件不会误判等边,但如果逻辑顺序调整,这个条件会把等边也归为等腰,不过这属于逻辑严谨性问题,核心问题还是语法和顺序错误。

修正后的参考SQL

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 AS triangle_type
FROM TRIANGLES;

内容的提问来源于stack exchange,提问作者Rupam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:25:18