我有点问题。 如何将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
答案 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