首页 >数据库 >mysql教程 >如何防止 MySQL SUM 函数返回 NULL?

如何防止 MySQL SUM 函数返回 NULL?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-31 07:22:30272浏览

How to Prevent MySQL SUM Function from Returning NULL?

如何在 MySQL SUM 函数中处理 NULL 值

在 MySQL 中,SUM 函数在没有找到值时通常会返回 NULL,这可以不方便。本文将探讨如何使用 COALESCE 函数来确保 SUM 在未找到任何值时始终返回“0”。

问题:

考虑如下查询:

<code class="sql">SELECT SUM(Column_1)
FROM Table
WHERE Column_2 = 'Test'</code>

如果 Column_2 中没有符合条件的条目,该函数将返回 NULL。但是,我们可能更希望它返回“0”。

解决方案:使用 COALESCE

要解决此问题,请使用 COALESCE 函数。 COALESCE 将多个值作为参数并返回第一个非 NULL 值。通过将其与 SUM 函数一起使用,我们可以确保遇到 NULL 时结果始终为“0”。

<code class="sql">SELECT COALESCE(SUM(column),0)
FROM   table
WHERE  ...</code>

示例:

让我们使用用于演示 COALESCE 函数的 SQL 小提琴:http://www.sqlfiddle.com/#!2/d1542/3/0

其他信息:

COALESCE函数还可以与其他函数一起使用来处理 NULL 值。以下是使用三个具有不同值的表的示例:

MySQL 5.5.32 架构设置:

<code class="sql">CREATE TABLE foo (
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO foo (val) VALUES
(null), (1), (null), (2), (null), (3), (null), (4), (null), (5), (null), (6), (null);

CREATE TABLE bar (
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO bar (val) VALUES
(1), (2), (3), (4), (5), (6);

CREATE TABLE baz (
  id    INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  val   INT
);

INSERT INTO baz (val) VALUES
(null), (null), (null), (null), (null), (null);</code>

查询:

<code class="sql">SELECT  'foo'                   as table_name,
        'mixed null/non-null'   as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    foo
UNION ALL

SELECT  'bar'                   as table_name,
        'all non-null'          as description,
        21                      as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    bar
UNION ALL

SELECT  'baz'                   as table_name,
        'all null'              as description,
        0                       as expected_sum,
        COALESCE(SUM(val), 0)   as actual_sum
FROM    baz</code>

结果:

TABLE_NAME DESCRIPTION EXPECTED_SUM ACTUAL_SUM
foo mixed null/non-null 21 21
bar all non-null 21 21
baz all null 0 0

以上是如何防止 MySQL SUM 函数返回 NULL?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn