我有mysql表有4列(product1,sample1,peoduct2,sample)我想查询得到sample1&上的单元格总和sample32其中product1或product2 = 4
我用
$query="SELECT (SELECT SUM(sample1) FROM table WHERE product1= 4) + (SELECT SUM(sample2) FROM table WHERE product2 = 4) AS SumCount";
$result = mysql_query($query) or die(mysql_error());
while($row=mysql_fetch_array($result)){ ?>
<td>
echo $row[1];
}
product1 sample1 product2 sample2
------------- ----------- ----------- -----------
5 1 3 5
7 3 4 6
4 7 8 7
10 8 9 9
4 2 2 8
2 5 2 8
结果应该是值4(7 + 2 + 6)但是我为这样的所有产品制作循环
4 15 2 21
但是它给了我一行而不是多行产品
答案 0 :(得分:1)
您可以使用sum
表达式中的条件语句执行此操作,如下所示:
select sum((case when product1 = 4 then sample1 else 0 end) + (case when product2 = 4 then sample2 else 0 end)) total
from stuff
where product1 = 4 or product2 = 4;
如果您希望查看各行的总和值,只需删除sum
,然后使用:
select (case when product1 = 4 then sample1 else 0 end) + (case when product2 = 4 then sample2 else 0 end) total
from stuff
where product1 = 4 or product2 = 4;
如果您确实希望它显示添加公式,您可以使用group_concat
和+
作为分隔符,如下所示:
select group_concat((case when product1 = 4 then sample1 else 0 end) + (case when product2 = 4 then sample2 else 0 end) separator '+') total
from stuff
where product1 = 4 or product2 = 4;
以下是您的一个示例小提琴:http://sqlfiddle.com/#!9/bbf57/4
(注意,如果product1和product2都是4,那么这将包括sample1和sample2,因此product1 = 4,sample1 = 5,product2 = 4,sample2 = 9将为计数增加14)。
如果我还没有达到您期望的输出(您没有举例说明您希望输出的外观),请告诉我,我会进一步更新。
根据评论进行更新
我认为这可能最终成为你想要的。要获得所有产品的样本总和,一种简单的方法是创建一个临时表,将所有product1 / sample1,product2 / sample2组合到单个产品/样本表中,然后按组合产品字段进行分组以对组合样本求和值。
select product, sum(sample) total
from
(select product1 as product, sample1 as sample
from stuff
union all
select product2 as product, sample2 as sample
from stuff
) q1
group by product