[英]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.