我有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
但它给我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
updated fiddle