MySQL Window函数计算百分比

时间:2018-12-06 05:26:23

标签: mysql window

嗨,我使用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

关于我的代码的任何建议吗?谢谢

1 个答案:

答案 0 :(得分:0)

从窗口函数中删除PARTITION

SELECT
    A.totalProfit, 
    A.totalProfit / SUM(A.totalProfit) OVER () AS profitPercent,
    A.productCode,
    A.productName
FROM A;

enter image description here

Demo

在这种情况下,您希望获取整个表的利润之和,因此对SUM()的调用中不应有任何分区。 OVER没有输入是完全合法的,在这种情况下,它只意味着没有分区,默认情况下将包括整个表。