Для проведения такого частотного анализа вам необходим способ создания всех комбинаций продуктов, приобретенных в каждой транзакции.Для этого рекурсивного SQL это путь.
Начиная с таблицы покупок:
create table purchases (id varchar(6), product varchar(6));
insert into purchases
values ('A','001')
,('A','002')
,('B','002')
,('B','001')
,('B','003')
,('C','001');
Мы используем следующий рекурсивный запрос для генерации всех комбинаций покупок для транзакции, ограниченных максимум 5элементов на комбинацию (при желании вы можете изменить этот предел), а затем выполнить частотный анализ сгенерированных комбинаций в запросе, следуя рекурсивному общему табличному выражению:
with recur(id, length, combo, lastitem) as (
-- Anchor Query
select p.id, 1, cast(product as varchar(max)), product from purchases p
union all -- Recursive Part
select r.id, length+1, combo+','+product, product
from recur r
join purchases p
on p.id = r.id
and p.product > r.lastitem
where r.length < 5
)
-- Output query
select length, combo, count(*) frequency
from recur
group by length, combo
order by frequency desc
, length desc
, combo;
Получая следующие результаты для заданных данных:
length | combo | frequency
-----: | :---------- | --------:
1 | 001 | 3
2 | 001,002 | 2
1 | 002 | 2
3 | 001,002,003 | 1
2 | 001,003 | 1
2 | 002,003 | 1
1 | 003 | 1