2014-01-06 5 views
1

Я пытаюсь вычислить общее количество столбцов, которые я только что создал, с помощью SUM (if). У меня есть таблица с несколькими номерами продуктов, но я хочу получить итоговые значения только для определенных продуктов. Это мой запрос:Общее количество столбцов, использующих Sum (if) в mysql

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) 

Я получаю итоги для каждого продукта в колонках, как ожидалось, но когда я пытаюсь получить общий итог (Product 1 + product 2 + Product 3) с помощью Sum(orders.Qty) as Total, я получаю сумму всех продуктов в таблице и не только 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) 
Смежные вопросы