从另一列替换或替换 MySQL 查询中的值
Substitute or replacing value in MySQL query from another column
如何将 MySQL 查询中的 NULL
值替换或替换为我需要的值?
If null or coalesce or with case or with if?
我无法让它工作。
例子在SQL Fiddle
第一行和第二行:
- 第三列:所有产品的总和;
- 第四列:活跃产品;
- 第五列:非活动产品。
第三、四行:
- 第三列:所有产品的总和;
- 第四列:活跃产品;
- 第五列:非活动产品(
NULL
值 => 需要 0
值)。
第五六行:
- 第三列:所有产品的总和;
- 第四列:有效产品(
NULL
值 => 需要 0
值);
- 第五列:非活动产品(
NULL
值 => 需要第三列中的值)。
如果我获得非活动产品的 NULL
值,我需要将其替换为 0
,但是当我获得活动产品的 NULL
值时,我需要将其替换为0
并在非活动列中将 NULL
值替换为第三列中的值。
没有 UPDATE
或 INSERT
函数,因为这是一个 MySQL 视图。
基本上我需要的是:
if active <> 0 and inactive <> 0
then 'no value change'
if active <> 0 and inactive = null
then inactive = 0
if active = null
then active = 0 and inactive = product_sum
我们可以使用 表达式 代替 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 标准的功能。
在 MySQL 中使用方便的 IFNULL
函数可以实现相同的结果。
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
如何将 MySQL 查询中的 NULL
值替换或替换为我需要的值?
If null or coalesce or with case or with if? 我无法让它工作。
例子在SQL Fiddle
第一行和第二行:
- 第三列:所有产品的总和;
- 第四列:活跃产品;
- 第五列:非活动产品。
第三、四行:
- 第三列:所有产品的总和;
- 第四列:活跃产品;
- 第五列:非活动产品(
NULL
值 => 需要0
值)。
第五六行:
- 第三列:所有产品的总和;
- 第四列:有效产品(
NULL
值 => 需要0
值); - 第五列:非活动产品(
NULL
值 => 需要第三列中的值)。
如果我获得非活动产品的 NULL
值,我需要将其替换为 0
,但是当我获得活动产品的 NULL
值时,我需要将其替换为0
并在非活动列中将 NULL
值替换为第三列中的值。
没有 UPDATE
或 INSERT
函数,因为这是一个 MySQL 视图。
基本上我需要的是:
if active <> 0 and inactive <> 0
then 'no value change'
if active <> 0 and inactive = null
then inactive = 0
if active = null
then active = 0 and inactive = product_sum
我们可以使用 表达式 代替 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 标准的功能。
在 MySQL 中使用方便的 IFNULL
函数可以实现相同的结果。
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