将价格数据从1到100标准化

时间:2016-11-03 00:12:16

标签: mysql sql

我有一张只有2150万行的表,代表从1995年开始在英国销售的物业。对于每个条目,我根据当年的通货膨胀计算了一个新价格,现在想要将这个膨胀的价格标准化以指定一个值在1到100之间。

表中的平均价格为240000.数据偏差的方式是3/4的数据低于平均值。 Max是1.5亿,min是1000

使用下面的SQL查询规范化数据会导致2000万个属性的归一化价格为1。

UPDATE properties p
SET inflatedNorm = round(
    1 + (
        (p.inflatedPrice - MIN_PRICE) * (100 - 1) / (MAX_PRICE- MIN_PRICE)
    )
);

我做错了什么?肯定有2000万1是错的,应该有更多不同的价值分布,其中大部分都在平均价格附近。

1 个答案:

答案 0 :(得分:0)

不要围绕结果!让数据库存储小数点。所以:

UPDATE properties p
    SET inflatedNorm = 1 + (p.inflatedPrice - MIN_PRICE) * (100.0 - 1) / (MAX_PRICE - MIN_PRICE);

另一个问题是价格是什么样的。我会从:

开始
select max(price), min(price)
from properties p;

如果最大值是最小值的100倍,那么您将看到您所看到的现象。范围是您计算的唯一重要因素,而不是范围内的实际分布。

也就是说,如果你考虑美国人的净资产并将比尔盖茨纳入你的数据,那么99%以上的美国人的净资产将低于比尔盖茨的1%。