Mysql另外,结果不如预期

1 mysql

有人可以告诉我为什么这不起作用?我想得到两个不同列的总和并将它们加在一起.测试数据在一列中为10,在另一列中为10,总共为20,这正是我所期待的.

Sum(col1 + col2) as total
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

可能在一列或两列中都有一些NULL值.汇总函数SUM忽略NULL值,但加法运算符不 - (1 + NULL)值为NULL(而不是1,你所期望的).结果总和将低于预期.

要获得正确的总和,可以单独对每列进行SUM并添加结果:

SUM(col1) + SUM(col2) AS total
Run Code Online (Sandbox Code Playgroud)

如果其中一列可能完全为NULL,则仍然无效.然后你可以尝试这个:

SUM(IFNULL(col1, 0)) + IFNULL(col2, 0)) AS total
Run Code Online (Sandbox Code Playgroud)

例如,假设你有这个表:

col1 | col2
-----+----
5    | NULL
5    | 10

然后尝试以下不同的查询:

SELECT SUM(col1), SUM(col2)        FROM yourtable;    -- Returns 10, 10
SELECT SUM(col1 + col2)            FROM yourtable;    -- Returns 15
SELECT SUM(col1) + SUM(col2)       FROM yourtable;    -- Returns 20 
SELECT SUM(col1 + IFNULL(col2, 0)) FROM yourtable;    -- Returns 20 
Run Code Online (Sandbox Code Playgroud)

测试数据:

CREATE TABLE yourtable (col1 INT NOT NULL, col2 INT NULL);
INSERT INTO yourtable (col1, col2) VALUES (5, NULL), (5, 10);
Run Code Online (Sandbox Code Playgroud)