从一个表中汇总多个列

时间:2015-04-12 04:07:49

标签: php mysql

我有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 个答案:

答案 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

updated fiddle