我有一个数据库,记录了每个商店的销售情况。我可以查询以获得每个商店的总销售额:
Select SellerName, Count(*) as Sales From salesData Group By SellerName...
如何创建查询以显示每个SellerName的市场份额?
即。销售额/总销售额
答案 0 :(得分:1)
回答一些改进:
无需将邮政编码放入SQL中两次,只需将其作为内部和外部之间的条件。外部查询。 (见下文)
当然希望您将BuyerZipCode
存储为VARCHAR
,而不是INTEGER
。所以引用你的邮政编码,例如:'90210'
而不是90210
。
除非必须,否则避免在SQL查询中使用数字格式(乘以100,舍入,连续%)。无论您的前端是什么(PHP,Excel,Crystal Reports)都可以很好地完成格式化工作。 - 这是一个人的偏好,有些人会争辩。
缩进以提高可读性。 - 再次是个人的事情;不会影响查询的执行,但有助于调试并鼓励其他人帮助您查看代码。
代码:
SELECT SellerName
, count(*) ytd
, count(*)/(SELECT count(*)
FROM onlineData
WHERE BuyerZipCode = o.BuyerZipCode) share
FROM onlineData o
WHERE BuyerZipCode = '90210'
GROUP BY SellerName, BuyerZipCode
Order BY ytd DESC
LIMIT 0, 700 ;
修改强>
刚刚修改了GROUP BY SellerName
- > GROUP BY SellerName, BuyerZipCode
。当您查找一个邮政编码时,它不会伤害或改变结果,例如90210,但是如果你想要多个区WHERE BuyerZipCode IN ('90210', '90211', '90212')
那么重要。对于每个邮政编码的市场份额计算,只需完全删除WHERE
条款。
答案 1 :(得分:0)
首先,您要了解总销售额
Select sum(salesAmount) as totalSalesAmount From salesData
然后您使用该金额计算每位销售员的百分比
Select SellerName, sum(salesAmount)/totalSalesAmount as Sales From salesData Group By SellerName...
如果你想要它,你可以在一个查询中使用同一个表并使用不同的名称进行投影
答案 2 :(得分:0)
SELECT SellerName, Count(*) as Sales, (Count(*)/(SELECT Count(*) FROM salesData))*100 as salesPerCent
From salesData Group By SellerName