【问题标题】:sum two or more columns in mysql table but leave out the null field对 mysql 表中的两列或多列求和,但省略空字段
【发布时间】:2015-02-06 07:51:08
【问题描述】:

如何对两列或三列求和,但如果任何列为 NULL,则它不应该影响 SUM 的值。 如果将列全部添加在一起,我会得到 NULL。

这是我正在尝试处理的表格示例。

id   col1 col2   col3  total
1     2     3    5
2     10    5    NULL
3     2     NULL NULL

这是我尝试的查询。

SELECT id,col1,col2,col3, (col1+col2+col3) AS Total FROM test_table;

如果没有 NULL 列,则此查询工作得非常好,但如果有任何空列,则添加 null 的数字变为 null,结果中我得到 null ..

下面是我添加的结果截图。

在上图中,如果 sum 中的任何列为空,我在 Total 列中得到 NULL。 但结果应该像 10,15,2 一样尊重那里的 id。

【问题讨论】:

  • 合并每列值

标签: mysql sql database


【解决方案1】:

一种方法是使用IFNULL 函数:

SELECT id,col1,col2,col3, (IFNULL(col1,0)+IFNULL(col2,0)+IFNULL(col3,0)) AS Total
FROM test_table;

【讨论】:

  • 谢谢。实际上,我在今天的采访中被问到了这个问题,我当然无法回答。我试图在互联网上找到答案,但我想我没有用正确的词来搜索,这就是我发布这个问题的原因。谢谢,它成功了。
【解决方案2】:

使用 coalesce 将空值替换为 0。我更喜欢 coalesce。根据我的经验,它与数据库无关,其中 isnullifnullnvl 和其他特定于数据库。

SELECT col1,col2,col3, (coalesce(col1,0)+ coalesce(col2,0)+ coalesce(col3,0)) as total from test_table;

【讨论】:

    【解决方案3】:

    在这种情况下,您需要使用 IsNull(Column, 0) 来确保它至少始终为 0。

    SELECT col1, col2, col3, sum(isnull(col1,0) + isnull(col2,0) + isnull(col3,0)) AS Total FROM test_table group by id;

    【讨论】:

      【解决方案4】:

      修改您的选择语句以排除空值。

      【讨论】:

        猜你喜欢
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 2015-12-09
        • 2011-01-21
        • 1970-01-01
        相关资源
        最近更新 更多