单行的总和值?

use*_*841 23 mysql sum

我有一个MySQL查询返回一行1s和0s的单行.这是一个进度条指示器.我现在在代码中对它进行求和,但我尝试在查询中对值进行求和,并意识到我不能使用SUM(),因为它们只有很多列而只有一行.

有没有办法可以在查询中自动对此进行求和?就像这样:

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提,item_1等等不是简单的字段值,但每个都是一个表达式,例如SELECT IF( field_1 = 1 and field_2 IS NOT NULL, 0, 1 ) AS item_1 ...,所以看起来我必须做一个嵌套查询:

SELECT ( item_1 + item_2 ... ) FROM ( SELECT IF( field_1 = y and field_2 IS NOT NULL, 1, 0 ) AS item_1 ... ) AS alias
Run Code Online (Sandbox Code Playgroud)

正确?

Red*_*ter 48

select item_1 + item_2 + item_3 + item_4 as ItemSum
from MyTable
Run Code Online (Sandbox Code Playgroud)

如果可以有空值,则需要像这样处理它们:

select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

你不能真正做到这一点比:

SELECT item_1 + item_2 + item_3 + item_4
FROM Table1
Run Code Online (Sandbox Code Playgroud)

如果你有很多列,那么输入就需要一段时间.我想创建表也需要很长时间.

在将来以不同的方式设计表格,以便流程的每个阶段都是行而不是列.换句话说,而不是这样:

id, item_1, item_2, item_3, item_4
Run Code Online (Sandbox Code Playgroud)

你的表格看起来像这样:

id, item_number, value
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样查询它:

SELECT SUM(value)
FROM Table1
WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

实际上,您可能甚至不需要值列.行的存在与否是足够的信息.所以你的查询变成:

SELECT COUNT(*)
FROM Table1
WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

这次对你来说可能有点晚了,但如果你还有机会改变设计,那么可能值得考虑一下.