【发布时间】:2009-12-01 14:52:22
【问题描述】:
我正在阅读《编程集体智能》一书,并尝试将我学到的知识应用于 Northwind 数据库。虽然我对我对所提出的算法的理解还没有信心,但我开始对一般概念有所了解。
使用 Northwind 数据库,我尝试使用以下伪逻辑显示“购买此商品的客户也购买了 XYZ”的列表:
- 查找其他也购买了我的商品的客户
- 查找这些客户购买的所有其他商品
- 根据购买次数对商品进行排名
- 从上一步返回前 N 个项目
我正在处理以下查询:
declare
@customerid nchar(5),
@productid int;
set @customerid = 'ALFKI';
set @productid = 59;
-- find other products from customers who
-- also purchased my productid
select top 10
od.productid, c.categoryname, p.productname, p.unitsonorder, count(od.productid)
from
[order details] od
inner join orders o on o.orderid = od.orderid
inner join products p on p.productid = od.productid
inner join categories c on c.categoryid = p.categoryid
where
o.customerid <> @customerid and
od.productid <> @productid and
p.discontinued = 0
group by
od.productid, c.categoryname, p.productname, p.unitsonorder
order by 5 desc,4 desc
我认为我的下一步是分解查询,以便我可以根据最近的购买(而不是所有历史购买)进行过滤,并将客户匹配限制为 N 个客户,而不是购买我产品的所有客户。任何人都可以提供任何指示吗?我是否朝着正确的方向前进?我应该采取完全不同的方向吗?
在这一点上,我的目标是性能而不是准确性,因为我知道我还没有将算法应用到最大收益的经验。我只是想应用这个概念。一旦我对它的理解感到满意,我打算针对具有更真实客户数据的更大数据库测试此查询。
【问题讨论】:
标签: sql-server recommendation-engine collective-intelligence