输入时user_id, item_id
(两个text
数据)的简单表格。
问题是:从item_id
列中提取所有对和三元组合的方法是什么,并将它们的频率计算在user_id
上(即所有用户的1%百分比都有(1,2){ {1}}对)
我尝试过一些野蛮行为:
item_id
但什么都没有
答案 0 :(得分:1)
此特定任务属于比执行更容易编写的类型:
declare @t table (
UserId int not null,
ItemId int not null
);
insert into @t
values
(1, 1),
(1, 2),
(1, 3),
(2, 1),
(2, 2),
(3, 2),
(3, 3),
(4, 1),
(4, 4),
(5, 4);
-- Pairs
select t1.ItemId as [Item1], t2.ItemId as [Item2], count(*) as [UserCount]
from @t t1
inner join @t t2 on t1.UserId = t2.UserId and t1.ItemId < t2.ItemId
group by t1.ItemId, t2.ItemId
order by UserCount desc, t1.ItemId, t2.ItemId;
正如您所看到的,这里有一个半笛卡尔(三角形)连接,这意味着随着记录数量的增加,性能将迅速下降。当然,正确的索引对于这种查询至关重要。
理论上,您可以轻松扩展此方法以识别三元组,但可能会证明您的实际数据不可行。理想情况下,应使用每行方法计算此类事物,并缓存结果。