繁体   English   中英

计算每个客户在相同城市和抽油烟机的价格百分比

[英]Calculate percentile of price in the same cities and hoods per cust

这是我的客户表:

rn 客户编号 价格 街道编号 城市编号
1个 2468 100 1个 16
2个 1234 200 1个 16
3个 5678 300 1个 16
4个 7890 20 5个 9
5个 2346 70 5个 9
6个 4532 10 5个 9

我想添加一个“百分位数”列,其中包含每个引擎盖 ID 和 city_id 的计算结果,例如:

  • 100/(100+200+300)= 0.16667

  • 200/(100+200+300)= 0.33333

  • 300/(100+200+300)=0.500

output:

rn 客户编号 价格 街道编号 城市编号 百分位数
1个 2468 100 1个 16 0.16667
2个 1234 200 1个 16 0.33333
3个 5678 300 1个 16 0.50
4个 7890 20 5个 9 0.2
5个 2346 70 5个 9 0.7
6个 4532 10 5个 9 0.1

我想使用百分位数 function 但它不起作用。

如果有人有好主意,那将是惊人的:)

在 MySQL 8.0 中,您可以使用 price 和 window function 之间的除法来计算 <city_id, street_id> 每个分区的总和。

SELECT *, price / SUM(price) OVER(PARTITION BY city_id, street_id) AS percentile 
FROM tab

此处查看演示。


在 MySQL 5.X 中,您需要一个子查询来计算每个分区的最大值,然后与原始表连接并应用除法。

SELECT tab.*, tab.price / cte.total_price AS percentile
FROM       tab 
INNER JOIN (SELECT city_id, street_id, 
                   SUM(price) AS total_price
            FROM tab
            GROUP BY city_id, street_id) cte
        ON tab.city_id = cte.city_id AND tab.street_id = cte.street_id

此处查看演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM