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