簡體   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