2013-12-06 4 views
2

Как это возможно построить запрос, как это (Sql Server 2008 R2):
(мне нужен «Средняя цена» за результат)значения делят в группе По запросу

SELECT 
    CategoryId 
    , SUM(Price) AS TotalPrice 
    , SUM(Quantity) AS TotalQuantity 
    -->, TotalPrice/TotalQuantity AS AveragePrice 
FROM Products 
GROUP BY CategoryId 

(если это возможно без перерасчета еще один раз два сУММ ...)

ответ

3

без пересчета ...

SELECT *, A.TotalPrice/A.TotalQuantity AS AveragePrice 
FROM (SELECT 
     CategoryId 
     , SUM(Price) AS TotalPrice 
     , SUM(Quantity) AS TotalQuantity 
     FROM Products 
     GROUP BY CategoryId) AS A 
1
SELECT CategoryId, 
     SUM(Price) AS TotalPrice, 
     SUM(Quantity) AS TotalQuantity, 
     (SUM(Price) * 1.0/SUM(Quantity) * 1.0) AS AveragePrice 
FROM Products 
GROUP BY CategoryId 

или вы можете использовать CTE

WITH cte 
AS 
(
    SELECT CategoryId, 
      SUM(Price) AS TotalPrice, 
      SUM(Quantity) AS TotalQuantity 
    FROM Products 
    GROUP BY CategoryId 
) 
SELECT CategoryId, 
     TotalPrice, 
     TotalQuantity, 
     TotalPrice/TotalQuantity * 1.0 AveragePrice 
FROM cte 
+0

Будет ли он рассчитать сумму в два раза? Если да, это не очень оптимальное решение ... – serhio

+0

попытайтесь посмотреть план выполнения. –

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