Подсчет вхождений пар в SQL - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть таблица TAB, подобная этой:

box_id | product_id | randominfo

1      | a          | ...
1      | b          | ...
1      | c          | ...
2      | a          | ...
2      | b          | ...
3      | a          | ...
3      | c          | ...

Я хочу, чтобы для каждой пары продуктов было количество раз, которое они находятся в одной коробке.Например:

product 1 | product 2 | number of times

a         | b         | 2
a         | c         | 2
b         | c         | 1

Я подумал о чем-то вроде:

SELECT p1.product_id, p2.product_id, COUNT (*) AS nb
   FROM TAB p1
      LEFT JOIN TAB p2 ON p1.product_id <> p2.product_id
      GROUP BY p1.product_id, p2.product_id
      ORDER BY nb DESC

Я не могу проверить, работает ли это.

1 Ответ

0 голосов
/ 16 декабря 2018

Ваш запрос должен быть в порядке, хотя вы, вероятно, не хотите, чтобы пары появлялись дважды.Поэтому использовать < вместо <>:

SELECT p1.product_id, p2.product_id, COUNT(*) AS nb
FROM TAB p1 JOIN
     TAB p2
     ON p1.product_id < p2.product_id
GROUP BY p1.product_id, p2.product_id
ORDER BY nb DESC;

A LEFT JOIN не нужно, если только вы не хотите рассматривать коробки, в которых есть только один продукт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...