gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:52:48 25 4
gpt4 key购买 nike

如何将 MySQL 查询中的 NULL 值替换或替换为我需要的值?

If null or coalesce or with case or with if?我无法让它工作。

示例在 SQL Fiddle

  • 第一行和第二行:

    • 第三列:所有产品的总和;
    • 第四列:活跃产品;
    • 第五列:非事件产品。
  • 第三行和第四行:

    • 第三列:所有产品的总和;
    • 第四列:活跃产品;
    • 第五列:非事件产品(NULL 值 => 需要 0 值)。
  • 第五行和第六行:

    • 第三列:所有产品的总和;
    • 第四列:有效产品(NULL 值 => 需要 0 值);
    • 第五列:非事件产品(NULL 值 => 需要第三列中的值)。

如果我得到非事件产品的 NULL 值,我需要用 0 替换它,但是当我在事件产品中得到 NULL 值时,我需要将其替换为 0,并在非事件列中将 NULL 值替换为第三列中的值。

没有 UPDATEINSERT 函数,因为这是一个 MySQL View 。


基本上我需要的是:

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 - 从另一列替换或替换 MySQL 查询中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36775438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com