我有一个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
正确?
答案 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
这次对你来说可能有点晚了,但如果你还有机会改变设计,那么可能值得考虑一下。