【问题标题】:how do I do a nested case in mysql?如何在 mysql 中进行嵌套案例?
【发布时间】:2021-05-30 18:57:02
【问题描述】:

观察 select 语句中使用的以下行

(case when p1 = 0 then 1 else (p2-p1)/p1 end) as delta_pct,

这一行给出了 p1 和 p2 之间的百分比变化,如果 p1 为 0,则返回 1 以避免除以 0 错误。但如果 p2 也为 0,则它给出 1,这是不正确的。我如何修改他的线路以解决这种情况?

类似

case when p1 = 0
    case when p2 = 0
        then 0
    then 1
else (p2-p1)/p1

【问题讨论】:

标签: mysql


【解决方案1】:

您可以使用具有更多级别的CASE 表达式来涵盖所有边缘情况:

CASE WHEN p1 = 0 AND p2 = 0 THEN 0
     WHEN p1 = 0 THEN 1
     ELSE (p2 - p1) / p1 END AS percentage

【讨论】:

    【解决方案2】:

    通常,您可以使用带有多个 AND 条件的 case 表达式来覆盖您的逻辑,而不是嵌套 case 但我真的需要嵌套案例

    但我确实需要嵌套案例

    case 
    when p1 = 0 THEN 
        case when p2 = 0
             then 0
             ELSE 1 
             END 
    else (p2-p1)/p1
    END delta_pct
    

    您可以清楚地看到,在这种情况下,复合和条件的使用更容易

    CASE WHEN p1 = 0 AND p2 = 0 THEN 0
        WHEN p1 = 0 THEN 1
     ELSE (p2 - p1) / p1 END delta_pct 
    

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多