使用MYSQL计算市场份额

时间:2014-07-03 18:58:16

标签: mysql

我有一个数据库,记录了每个商店的销售情况。我可以查询以获得每个商店的总销售额:

Select SellerName, Count(*) as Sales From salesData Group By SellerName...

如何创建查询以显示每个SellerName的市场份额?

即。销售额/总销售额

3 个答案:

答案 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