Mysql另外,结果不如预期

时间:2011-01-23 09:00:04

标签: mysql

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

Sum(col1 + col2) as total

1 个答案:

答案 0 :(得分:5)

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

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

SUM(col1) + SUM(col2) AS total

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

SUM(IFNULL(col1, 0)) + IFNULL(col2, 0)) AS total

例如,假设您有此表:

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 

测试数据:

CREATE TABLE yourtable (col1 INT NOT NULL, col2 INT NULL);
INSERT INTO yourtable (col1, col2) VALUES (5, NULL), (5, 10);