Как найти ассоциацию Apriori в операторе T-SQL? - PullRequest
3 голосов
/ 04 мая 2011

База данных:

Transaction  ProductID
 1              1000
 2              1000
 2              1001 
 3              1000
 3              1002
 4              1000
 4              1001
 5              1003

Как найти этот результат с помощью оператора T-SQL в приведенной выше таблице?

+-------------+-----------+-----------------+
| PRODUCTID1  | PRODUCTID2|     SUPPORT     |
+-------------+-----------+-----------------+
|      1000   |   1001    |         2       |
+-------------+-----------+-----------------+
|      1000   |   1002    |         1       |
+-------------+-----------+-----------------+
|      1000   |   1003    |         0       |
+-------------+-----------+-----------------+
|      1001   |   1002    |         0       |
+-------------+-----------+-----------------+
|      1001   |   1003    |         0       |
+-------------+-----------+-----------------+
|      1002   |   1003    |         0       |,
+-------------+-----------+-----------------+

Тестовая таблица:

create table transactions(
   ORDERID    INT,
   PRODUCTID INT
);

insert into transactions(ORDERID, PRODUCTID)
values ('1', '1000')
      ,('2', '1000')
      ,('2', '1001')
      ,('3', '1000')
      ,('3', '1002')
      ,('4', '1000')
      ,('4', '1001'),
       ('5', '1003');

Заранее спасибо.

1 Ответ

3 голосов
/ 04 мая 2011

Можете ли вы вывести нули? то есть мы можем просто сказать, что все, что не указано в списке, равно нулю? если так:

select t1.PRODUCTID as [PRODUCTID1], t2.PRODUCTID as [PRODUCTID2],
       COUNT(1) as [SUPPORT]
from transactions t1 inner join transactions t2
  on t1.ORDERID = t2.ORDERID
  and t1.PRODUCTID < t2.PRODUCTID
group by t1.PRODUCTID, t2.PRODUCTID

С выходом:

PRODUCTID1  PRODUCTID2  SUPPORT
----------- ----------- -----------
1000        1001        2
1000        1002        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...