2016-01-11 3 views
0

Вопрос:
Как я могу получить avg из Sum(od.UnitPrice * od.Quantity)SQL - запрос, чтобы получить Avg суммы

Запрос:

SELECT 
    YEAR(o.OrderDate) as [Sales Year], 
    MONTH(o.OrderDate) as [Sales Month], 
    SUM(CASE WHEN c.catid = 1 THEN od.UnitPrice * od.Quantity ELSE 0 END) AS [Dispenser Sales], 
    SUM(CASE WHEN c.catid = 2 THEN od.UnitPrice * od.Quantity ELSE 0 END) AS [Refill Sales] 
FROM 
    Orders o 
JOIN 
    orderdetails od ON o.order_id = od.orderid 
JOIN 
    store s ON s.pro_id = od.Proid 
JOIN 
    category c ON c.catid = s.catid 
GROUP BY 
    YEAR(o.OrderDate), MONTH(o.OrderDate) 
ORDER BY 
    YEAR(o.OrderDate), MONTH(o.OrderDate) 
+1

использования 'avg' вместо' sum' в запросе. –

ответ

1

Если я правильно понимаю, вы можете использовать avg(), но предположительно, вы не хотите, чтобы отсутствующие значения были равны 0. Таким образом, оставьте в редакции else или будьте действительно подробными и используйте else NULL:

SELECT YEAR(o.OrderDate) as [Sales Year], 
     MONTH(o.OrderDate) as [Sales Month], 
     AVG(case when c.catid = 1 then od.UnitPrice * od.Quantity end) AS [Dispenser Sales], 
     AVG(case when c.catid = 2 then od.UnitPrice * od.Quantity end) AS [Refill Sales] 
FROM . . . 

Другая возможность состоит в том, что вы хотите получить общий размер. Если это так, вы можете использовать функции окна, чтобы добавить среднее значение к каждой строке. Подзапрос/CTE делает это проще:

SELECT t.*, 
     AVG(DispenserSales) OVER() as avg_DispenserSales, 
     AVG(RefillSales) OVER() as avg_RefillSales 
FROM (SELECT YEAR(o.OrderDate) as SalesYear, 
      MONTH(o.OrderDate) as SalesMonth, 
      SUM(case when c.catid = 1 then od.UnitPrice * od.Quantity end) AS DispenserSales, 
      SUM(case when c.catid = 2 then od.UnitPrice * od.Quantity end) AS RefillSales 
     FROM . . . 
    ) t 
0

Используйте AVG (od.UnitPrice * od.Quantity) вместо Сумма (od.UnitPrice * od.Quantity)

+0

Но вам нужен средний пр. что? Год-месяц или ...? –

Смежные вопросы