· 8 years ago · Dec 09, 2017, 08:38 AM
1DELIMITER $$
2DROP PROCEDURE IF EXISTS `betao`.`sp_apriori` $$
3CREATE PROCEDURE `sp_apriori`(in sup_min integer,in conf integer)
4begin
5 delete from regras;
6 select @total:=count(distinct trans) as total from vendas;
7 /* criacao da tabela temporaria para um item */
8 create temporary table 1_item(
9 id int not null auto_increment primary key,
10 prdno int not null,
11 freq float not null);
12 /* inserindo na tabela temporaria os 1 itens de acordo com o suporte minimo definido no parametro de entrada */
13
14 insert into 1_item(prdno,freq) select prdno,ROUND(100*count(prdno)/@total,2) as freq
15 from vendas
16 group by prdno
17 having freq >= sup_min;
18
19 select @total_aux:=count(*) from 1_item;
20 set @i:=1;
21
22 /* nesse while verifico as associacoes dos 1 itens classificados acima */
23 while @i <= @total_aux do
24 select @cod:=prdno,@freqx:=freq from 1_item where id=@i;
25 insert into regras
26 select @cod,prdno,@freqx,ROUND(100*count(prdno)/@total,2) as freq
27 from vendas where trans in(select trans from vendas where prdno=@cod)
28 and prdno <> @cod group by prdno having freq >=sup_min; /*nessa linha filtro os produtos que sairam com o outro produto
29 set @i:=@i+1;
30 end while;
31/* seleciona las regras que estao dentro da confianca passada como parametro, ou seja, deleta aquelas que nao interessam */
32 delete from regras where (freq_xy/freq_x) < (conf/100);
33 end $$
34DELIMITER ;