mysql if语句,用于检查多个可能为null的值

jgwigjjp  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(376)

我在使用sql语句时遇到了困难。我有一个kpi(关键绩效指标),它可能也有一个上限和下限。设置kpi的人可以选择同时设置这两个,或者两者都不设置。我想在 Jmeter 板上显示一条消息,一眼就知道值是否在界限内。出于我们的目的,可以在边界中考虑空值,而不必具体说明哪个边界被打破。
所以基本上我想构造一个这样的语句:
Check if the kpi_lower_bound is null or not If it is not null, check that the kpi_value > kpi_lower_bound Check if the kpi_upper_bound is null or not If it is not null, check that the kpi_value < kpi_lower_bound If both statements pass or both are null, return "within bounds". If either statement fails, return "out of bounds." 我可以用这样的语句检查边界的两边

SELECT
IF(kpi_lower_bound IS NOT NULL, (IF(kpi_value < kpi_lower_bound,"Out of lower bounds","Within lower bounds")), "It's null") AS "lower bound break",

但我不知道如何将这样的多个if语句组合成一个大的条件检查。
任何帮助都将不胜感激。

a2mppw5e

a2mppw5e1#

当你需要的时候试试这个

SELECT
cast when kpi_lower_bound IS NOT NULL 
   then case when kpi_value < kpi_lower_bound then 'Out of lower bounds' else 'Within lower bounds' end
else 'It''s null' end AS "lower bound break"
cuxqih21

cuxqih212#

我们可以尝试使用的一个技巧是 COALESCE 并用以下逻辑替换缺少的边界:
缺少下限默认值 2147483647 缺少上限默认为 -2147483648 然后使用 CASE 表达式:

SELECT
    CASE WHEN kpi_value < COALESCE(kpi_lower_bound, -2147483648) OR
              kpi_value > COALESCE(kpi_upper_bound, 2147483647)
         THEN 'out of bounds'
         ELSE 'within bounds' END AS bounds
FROM yourTable;

这里的诀窍是,当 kpi_lower_boundNULL ,替换为 -2147483648 ,即一个非常小的数字,低于这个数字我们不希望 kpi_value 永远都够不着。这对任何人都有免费通行证的作用 kpi_value 可能是 NULL ,用于下限检查。同样的逻辑反过来适用于 NULL 值和上限检查。

相关问题