嗨,我使用MySQL Window函数来计算每种产品的利润占总利润的百分比。但是,它不符合我的预期。
数据:表A
total Profit productCode productName
5554.56 S10_1949 1952 Alpine Renault 1300
5473.71 S12_4675 1969 Dodge Charger
5078.35 S12_1108 2001 Ferrari Enzo
4475 S12_1099 1968 Ford Mustang
我的代码
select A.totalProfit,
A.totalProfit/sum(A.totalProfit) over (PARTITION BY A.totalProfit) as profitPercent,
A.productCode, A.productName
from A;
我得到的输出,该利润百分比未正确计算
totalProfit profitPercent productCode productName
5554.56 1 S10_1949 1952 Alpine Renault 1300
5473.71 1 S12_4675 1969 Dodge Charger
5078.35 1 S12_1108 2001 Ferrari Enzo
4475 1 S12_1099 1968 Ford Mustang
预期产量
totalProfit profitPercent productCode productName
5554.56 0.26987963 S10_1949 1952 Alpine Renault 1300
5473.71 0.265951368 S12_4675 1969 Dodge Charger
5078.35 0.246741996 S12_1108 2001 Ferrari Enzo
4475 0.217427005 S12_1099 1968 Ford Mustang
关于我的代码的任何建议吗?谢谢
答案 0 :(得分:0)
从窗口函数中删除PARTITION
:
SELECT
A.totalProfit,
A.totalProfit / SUM(A.totalProfit) OVER () AS profitPercent,
A.productCode,
A.productName
FROM A;
在这种情况下,您希望获取整个表的利润之和,因此对SUM()
的调用中不应有任何分区。 OVER
没有输入是完全合法的,在这种情况下,它只意味着没有分区,默认情况下将包括整个表。