我正在阅读 Programming Collective Intelligence 一书,并尝试将我学到的知识应用于 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 个客户,而不是购买我产品的所有客户。任何人都可以提供任何指示吗?我是否朝着正确的方向前进?我应该完全采取不同的方向吗?
在这一点上,我的目标是性能而不是准确性,因为我知道我还没有将算法应用到最大收益的经验。我只是想应用这个概念。一旦我对它的理解感到满意,我打算针对具有更真实客户数据的更大数据库测试此查询。