[英]Postgres get element rank after calculation
很難用語言表達我正在嘗試做的事情。 我對 SQL 的了解太少,無法使用正確的術語,因此我將嘗試以示例進行說明。
說,我有一個包含“值”、“用戶”和“類型”列的大表
value|user_id|type|
100| 1| 1|
200| 1| 1|
100| 1| 2|
722| 1| 3|
48| 2| 1|
724| 2| 2|
175| 2| 3|
1)我計算每個“類型”的每個“user_id”的總和“值”。
SELECT SUM("value"), "user_id", "type" from "table" group by "user_id", "type"
給我
value|user_id|type|
300| 1| 1|
100| 1| 2|
722| 1| 3|
48| 2| 1|
724| 2| 2|
175| 2| 3|
2)我想根據“值”為每個“類型”獲得“user_id”的排名。
對於類型 1,用戶 1 的值大於用戶 2 的值,因此用戶 1 的排名為 1,用戶 2 的排名為 2。對於類型 2,用戶 2 的值更大...
換句話說,我想為用戶 1 生成表:
rank|type
1|1
2|2
1|3
對於用戶 2:
rank|type
2|1
1|2
2|3
我真的很感激這方面的幫助。
您可以將聚合函數的結果用於窗口函數。 窗口函數將在group by
后處理:
SELECT sum(value), user_id, type,
rank() over (partition by type order by sum(value) desc)
from the_table
group by user_id, type
order by user_id, type;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.