PostgreSQL Query - PullRequest
       6

PostgreSQL Query

3 голосов
/ 04 ноября 2011

Я использую установку postgresql, и у меня есть таблица примерно такая:

sec_id     prod_id
1          789
1          908
1          678
13         789
13         123
13         908
15         789

То, что я хочу иметь, это определить перекрытие (общие prod_ids) внутри sec_id. То есть я хочу иметь возможность выводить что-то похожее на:

sec_id1    sec_id2    overlap
1          13         2       
1          15         1       
13         1          2       
13         15         1
15         1          1
15         13         1     

У меня нет особого опыта в этом, и я был бы признателен за любую помощь.

1 Ответ

2 голосов
/ 04 ноября 2011

Я привык к MySQL, поэтому вам может потребоваться немного изменить синтаксис для postgres:

SELECT a.sec_id AS sec_id1, b.sec_id AS sec_id2, COUNT(*) AS overlap
FROM tblname AS a JOIN tblname AS b 
WHERE a.prod_id = b.prod_id AND a.sec_id != b.sec_id 
GROUP BY a.sec_id, b.sec_id

Возможно, это будет работать в PostgreSQL (как и в MySQL):

SELECT a.sec_id AS sec_id1, b.sec_id AS sec_id2, COUNT(*) AS overlap
FROM tblname AS a JOIN tblname AS b ON a.prod_id = b.prod_id 
WHERE a.sec_id != b.sec_id 
GROUP BY a.sec_id, b.sec_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...