我有一个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)
你不能真正做到这一点比:
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)
这次对你来说可能有点晚了,但如果你还有机会改变设计,那么可能值得考虑一下.
| 归档时间: |
|
| 查看次数: |
68605 次 |
| 最近记录: |