Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 单行的和值?_Mysql_Sum - Fatal编程技术网

Mysql 单行的和值?

Mysql 单行的和值?,mysql,sum,Mysql,Sum,我有一个MySQL查询,它返回一个由1和0组成的单行。这是一个进度条指示器。现在我已经在代码中对其求和了,但是我尝试在查询中对值求和,并且意识到我不能使用sum(),因为它们有很多列,但只有一行 有没有办法在查询中自动求和?是这样的: item_1 | item_2 | item_3 | item_4 -------+--------+--------+-------- 1 | 1 | 0 | 0 select ifnull(item_1, 0) + i

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

有没有办法在查询中自动求和?是这样的:

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0
select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
id, item_number, value
SELECT SUM(value)
FROM Table1
WHERE id = @id

编辑:我忘了提到,
item_1
等等不是简单的字段值,但每个值都是一个表达式,例如
SELECT IF(field_1=1,field_2不为NULL,0,1)作为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
对吗

select item_1 + item_2 + item_3 + item_4 as ItemSum
from MyTable
如果可能存在空值,则需要如下处理:

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0
select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
id, item_number, value
SELECT SUM(value)
FROM Table1
WHERE id = @id

你做这件事最简单不过了:

SELECT item_1 + item_2 + item_3 + item_4
FROM Table1
如果您有很多列,则需要一段时间才能输入。我猜创建这个表也花了很长时间

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

id, item_1, item_2, item_3, item_4
您的桌子可能如下所示:

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0
select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
id, item_number, value
SELECT SUM(value)
FROM Table1
WHERE id = @id
然后你可以这样查询它:

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0
select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
id, item_number, value
SELECT SUM(value)
FROM Table1
WHERE id = @id
事实上,您甚至可能不需要value列。行的存在或不存在就是足够的信息。因此,您的查询变成:

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

这次对您来说可能有点晚了,但如果您仍然有机会更改设计,那么这可能值得考虑。

啊!因为它们是表达式,而不是简单的值,所以我可以做一个嵌套查询:选择(item_1+item_2…)FROM(SELECT IF(field_1=y,field_2不是NULL,1,0)作为item_1…)作为别名。对吗?我真的不能做你描述的不同设计的表格,因为每个
项实际上是一个布尔标志和一个值,每个都是不同类型的。因此,item_1的值可能是日期类型,item_2可能是字符串,等等。我仍然可以将所有这些值放在一个字符串列类型中,但是我不能对该列执行本机查询,例如日期计算或SUM()。是的,如果它们是不同的类型,那么将它们放在同一列中是个坏主意。