我有 2 個 Postgres 表:
表UserItems:
| 用戶名 | 用戶 | 物品 |
|---|---|---|
| 1 | 1 | 專案 1 |
| 2 | 1 | 專案2 |
| 3 | 1 | 第 3 項 |
| 4 | 2 | 專案 1 |
| 4 | 2 | 專案2 |
| 5 | 2 | 第 4 項 |
| 6 | 3 | 專案2 |
| 7 | 3 | 第5項 |
| 8 | 4 | 專案 1 |
| 9 | 4 | 第5項 |
桌子 Items
| 物品 | 功能1 | 功能2 | 功能3 |
|---|---|---|---|
| 專案 1 | val_11 | val_12 | val_13 |
| 專案2 | val_21 | val_22 | val_23 |
| 第 3 項 | val_31 | val_32 | val_33 |
| 第 4 項 | val_41 | val_42 | val_43 |
| 第 4 項 | val_51 | val_52 | val_53 |
我想計算給出了一些輸入X的Jaccard相似因此,舉例來說,如果輸入X是item1,我想找到已購買的每一個用戶item1,然后計算交點過聯盟(IOU)為每一個其他專案,其這些用戶中的任何一個已經購買。輸出將是:
| 物品 | 功能1 | 功能2 | 功能3 | 杰卡德 |
|---|---|---|---|---|
| 專案2 | val_21 | val_22 | val_23 | 0.67 |
| 第 3 項 | val_31 | val_32 | val_33 | 0.33 |
| 第 4 項 | val_41 | val_42 | val_43 | 0.33 |
| 第5項 | val_51 | val_52 | val_53 | 0.33 |
到目前為止我的方法是
SELECT t1.item
FROM UserItems AS t1
JOIN Items AS t2 ON t1.item<>t1.item
WHERE t1.item={input}
GROUP BY t1.item
然后我的想法是,我可以計算每個專案出現的總次數除以組的總數……但我對如何計算每個專案出現的總次數感到困惑
uj5u.com熱心網友回復:
這是一種方法,如果我沒有做錯的話:
select i.*, ii.jaccard
from Items i
join (
select item, count(distinct u.username) * 1.00 / uucount jaccard
from userItems u
join ( select tt.username, count(username) over () uucount
from userItems tt
where item = 'item1'
) t on t.username = u.username
and u.item <> 'item1'
group by u.item , t.uucount
) ii on ii.item = i.item
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366508.html
標籤:sql PostgreSQL的
