单行的总和值?

时间:2010-02-01 18:49:52

标签: mysql sum

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

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

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0

编辑:我忘了提及,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

正确?

2 个答案:

答案 0 :(得分:48)

select item_1 + item_2 + item_3 + item_4 as ItemSum
from MyTable

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

select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable

答案 1 :(得分:5)

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

SELECT item_1 + item_2 + item_3 + item_4
FROM Table1

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

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

id, item_1, item_2, item_3, item_4

你的桌子看起来像这样:

id, item_number, value

然后你可以像这样查询:

SELECT SUM(value)
FROM Table1
WHERE id = @id

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

SELECT COUNT(*)
FROM Table1
WHERE id = @id

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