从另一列替换或替换mysql查询中的值

时间:2016-04-21 16:24:00

标签: mysql null substitution

我有点问题。 如何将mysql查询中的空值替换或替换为null,以及我需要的值?

ifnull or coleasce或with case or with? 我无法让它发挥作用。

示例位于sqlfiddle

第一行和第二行:第三栏:所有产品的总和,第四栏:有效产品,第五栏:非活动产品。

第三和第四行:第三列:所有产品的总和,第四列:有效产品,第五列:非活动产品(空值=>需要0值)。

第五和第六行:第三列:所有产品的总和,第四列:活动产品( NULL值=>需要0值),第五列:非活动产品( NULL values =>需要第三列的值)。

如果我得到非活动产品的空值,我需要将其替换为0,

但是当我在活动产品中获得NULL值时,我需要将其替换为0,并且在非活动列中将null值替换为第三列中的值。

没有UPDATE或INSERT函数,因为这是一个mysql视图,我不需要更新或插入任何内容

thx,在前进

PS。基本上我需要的是:

如果有效<> 0且无效<> 0 然后'没有价值变化'

如果有效<> 0且无效= null 然后无效= 0

如果active = null 然后active = 0且不活动的product_sum

1 个答案:

答案 0 :(得分:3)

我们可以使用表达式代替SELECT列表中的列名。

如果我们希望SQL是可移植的并且符合ANSI标准,我们可以使用CASE表达式。例如:

  SELECT CASE WHEN t.inactive_product IS NULL
           THEN t.product_sum
           ELSE t.inactive_product 
         END AS inactive_product
    FROM ... t

使用COALESCE函数可以获得等效结果(更简洁):

  SELECT COALESCE(t.inactive_product,t.product_sum) AS inactive_product
       , COALESCE(t.active_product,0)               AS active_product
    FROM ... t

大多数数据库(包括MySQL)都提供扩展SQL标准的功能。

使用方便的IFNULL函数可以在MySQL中实现相同的结果。

  SELECT IFNULL(t.inactive_product,t.product_sum) AS inactive_product
       , IFNULL(t.active_product,0)               AS active_product
    FROM ... t

<强>随访:

对我而言,数据中似乎存在以下条件,或者至少在我们想要返回的结果中是这样:

 product_sum = active_product + inactive_product

我会做这样的事情:

SELECT ... 
     , t.product_sum
     , IFNULL(t.active_product,0) AS active_product
     , IFNULL(t.inactive_product,t.product_sum-IFNULL(t.active_product,0))
       AS inactive_product
 FROM ... t