使用MSSQL求解产品1达成35%市场份额所需新增数量
用MSSQL计算达成35%市场份额所需的产品1新增数量
问题背景
当前产品1数量为300,产品2、3、4的总数量为700,整体市场总数量为1000,产品1当前市场份额30%。需计算产品1的新增数量(新增后总数量同步增加),使其市场份额提升至35%。
数学推导
设:
- A = 产品1当前数量(300)
- B = 其他产品总数量(700)
- X = 产品1新增数量
目标份额方程为:
(A + X) / (A + X + B) = 0.35
代入数值解方程:
(300 + X) = 0.35 * (1000 + X) 300 + X = 350 + 0.35X 0.65X = 50 X = 50 / 0.65 = 1000/13 ≈76.92
若按你给出的乘数形式推导(设x为产品1的倍数,新增后数量为A*x),方程为:
(Ax) / (Ax + B) = 0.35
解得x=49/39≈1.2564,对应新增数量为300*(49/39)-300=1000/13≈76.92,结果一致。
MSSQL实现方案
1. 计算精确值
直接通过SQL语句计算新增数量的精确值:
SELECT -- 通用公式计算 (0.35 * 700 - 300*(1-0.35)) / (1-0.35) AS 新增数量精确值, -- 简化公式计算 50 / 0.65 AS 新增数量简化值, -- 乘数法计算 300*(49.0/39) - 300 AS 新增数量乘数法
2. 取整处理(业务场景常用)
向上取整(确保份额不低于35%):
SELECT CEILING(50 / 0.65) AS 新增数量向上取整, -- 验证取整后的份额 (300 + CEILING(50/0.65)) * 100.0 / (1000 + CEILING(50/0.65)) AS 验证份额
向下取整(接近35%):
SELECT FLOOR(50 / 0.65) AS 新增数量向下取整, (300 + FLOOR(50/0.65)) * 100.0 / (1000 + FLOOR(50/0.65)) AS 验证份额
其他解决方案
- 纯数学计算:直接套用公式
X = (目标份额 * B - A*(1-目标份额)) / (1-目标份额),代入数值快速得到结果,无需工具支持。 - Excel公式:在单元格中输入
=(0.35*700 - 300*(1-0.35))/(1-0.35)或简化的=50/0.65,用ROUNDUP/ROUNDDOWN函数处理取整。 - 通用SQL函数:适配不同参数场景,可创建自定义函数:
CREATE FUNCTION CalculateRequiredAddition( @CurrentProduct1 INT, @OtherProductsTotal INT, @TargetShare DECIMAL(5,2) ) RETURNS DECIMAL(10,2) AS BEGIN DECLARE @Addition DECIMAL(10,2) SET @Addition = (@TargetShare * @OtherProductsTotal - @CurrentProduct1*(1-@TargetShare)) / (1-@TargetShare) RETURN @Addition END -- 调用示例 SELECT dbo.CalculateRequiredAddition(300,700,0.35) AS 所需新增数量
内容的提问来源于stack exchange,提问作者Tim R
相关产品推荐
相关产品推荐

