【问题标题】:divide values in a Group By query在 Group By 查询中划分值
【发布时间】:2013-12-06 10:31:49
【问题描述】:
如何构建这样的请求(Sql Server 2008 R2):
(我需要每个结果的“平均价格”)
SELECT
CategoryId
, SUM(Price) AS TotalPrice
, SUM(Quantity) AS TotalQuantity
-->, TotalPrice/TotalQuantity AS AveragePrice
FROM Products
GROUP BY CategoryId
(如果可能,无需重新计算两个 SUM 的一倍...)
【问题讨论】:
标签:
sql
sql-server
sql-server-2008
group-by
【解决方案1】:
无需重新计算...
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
【解决方案2】:
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