我试图找到平均数量的产品/商店。我想要这样的东西:
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
但这只是给了我一个价值。有任何想法吗?感谢
答案 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)
你走在正确的轨道上。在您的派生表格中,获取DataContext
和SelectedItem
。然后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);