Я читаю книгу «Программирование коллективного разума» и пытаюсь применить полученные знания к базе данных 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 покупателям, а не ВСЕМ покупателям, купившим мой продукт. Кто-нибудь может предоставить какие-либо указатели? Я направился в правильном направлении? Должен ли я идти в совершенно ином направлении?
На данный момент моя цель - производительность, а не точность, так как я знаю, что у меня еще нет опыта применения алгоритмов для их максимальной выгоды. Я просто пытаюсь применить концепцию. После того, как я убедился, что понимаю это достаточно хорошо, я намерен проверить этот запрос на более крупной базе данных с более реалистичными данными о клиентах.