2014-01-06 37 views
1

我想计算刚刚用SUM(if)创建的列的总数。我有一个包含多个产品编号的表,但我只想获得特定产品的总计。这是我的查询:在mysql中使用总和(if)的列总数

Select date(orders.OrderDate) As Date, 
Sum(If((orders.ProductNumber = '1'), orders.Qty, 0)) As `Product 1`, 
Sum(If((orders.ProductNumber = '2'), orders.Qty, 0)) As `Product 2`, 
Sum(If((orders.ProductNumber = '3'), orders.Qty, 0)) As `Product 3`, 
From orders 
Group By date(orders.OrderDate) 

我得到列每种产品的总量不如预期,但是当我尝试使用Sum(orders.Qty) as Total总计(Product 1 + product 2 + Product 3)得到,我得到的所有产品的总和表,并不仅我正在寻找的3。

我怎样才能得到SUM(Product 1 + Product 2 + Product 3)

谢谢

回答

1

试试这个:

SELECT DATE(o.OrderDate) AS date, 
     SUM(IF(o.ProductNumber = '1', o.Qty, 0)) AS `Product 1`, 
     SUM(IF(o.ProductNumber = '2', o.Qty, 0)) AS `Product 2`, 
     SUM(IF(o.ProductNumber = '3', o.Qty, 0)) AS `Product 3`, 
     SUM(IF(o.ProductNumber IN ('1', '2', '3'), o.Qty, 0)) AS `Total` 
FROM orders o 
GROUP BY DATE(o.OrderDate) 
0

只需预先切割行除1,2,3,这是当ProductNumber被索引列更快。

SELECT DATE(orders.OrderDate) AS Date, 
    SUM(IF((orders.ProductNumber = '1'), orders.Qty, 0)) AS `Product 1`, 
    SUM(IF((orders.ProductNumber = '2'), orders.Qty, 0)) AS `Product 2`, 
    SUM(IF((orders.ProductNumber = '3'), orders.Qty, 0)) AS `Product 3`, 
    SUM(orders.Qty) AS Total 
FROM orders 
WHERE 
    orders.ProductNumber IN ('1', '2', '3') 
GROUP BY DATE(orders.OrderDate)