计算计数结果的平均值

时间:2016-05-25 19:34:55

标签: sql sql-server average

我试图找到平均数量的产品/商店。我想要这样的东西:

Store       Avg.Products
Store 1     100
Store 2     20

商店表:StoreId

产品表:Productid,Pname,StoreId

如果总共有100种产品,并且通过使用计数,我为商店1提供了9种产品,我希望商店1有9/100,其他商店也是如此

我试过了:

Select avg(counts) from(Select count(*) AS counts
   FROM Store Join Product ON Store.Id = product.StoreId Group By Store.id)table1

但这只是给了我一个价值。有任何想法吗?感谢

3 个答案:

答案 0 :(得分:0)

您可以尝试按 商店名称 对外部查询进行分组,并将AVG参数转换为float以允许它返回非整数值:

SELECT storeName, avg(CAST(counts AS float)) FROM 
    (Select count(*) AS counts, S.Name as storeName
        FROM Store S JOIN Product P ON S.Id = P.StoreId Group By S.id, S.Name) table1
    GROUP BY storeName

这可能不是最好的方法,但它应该返回预期的结果。

<强>更新

我已经验证了答案,并使用固定版本更新了代码。如果它适用于您的情况,请告诉我。

更新II

根据您的评论,您想计算每个商店名称的产品数量,然后将其除以数据库中的产品总数。 如果这必须是一个查询,您可以这样做:

SELECT S.Name as storeName, CAST(count(*) AS float) / MIN(T.TotalCount) AS AVGToTotalProductsCount
    FROM Store S JOIN Product P ON S.Id = P.StoreId
        JOIN (SELECT COUNT(1) AS TotalCount FROM Product) T ON 1=1
    GROUP BY S.Name

但是,如果查询可以拆分为多个查询,您可以像这样计算:

DECLARE @totalNumOfProducts INT   
SELECT @totalNumOfProducts = COUNT(1) FROM Product

SELECT S.Name as storeName, CAST(COUNT(*) AS float) / @totalNumOfProducts AS AVGToTotalProductsCount
    FROM Store S JOIN Product P ON S.Id = P.StoreId
    GROUP BY S.Name

答案 1 :(得分:0)

你走在正确的轨道上。在您的派生表格中,获取DataContextSelectedItem。然后COUNT(ProductID)返回GROUP BY StoreID上的主查询,然后执行JOIN聚合:

StoreID

答案 2 :(得分:0)

你太难了。只计算加入产生的产品。

select s.StoreID, s.Name, count(p.ProductID) ProductCount
from store s
    join Product p on p.StoreID=s.StoreID
group by s.StoreID, s.Name
order by count(p.ProductID);