Как посчитать отношения между именами в одной таблице? - PullRequest
0 голосов
/ 13 января 2012

У меня есть таблица с именем names со строками, состоящими из имени и группы для этого имени.

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

Таблица

name    | group
--------+------
Renato  |   1
John    |   1 
Paul    |   1
Renato  |   2
John    |   2
John    |   3
Paul    |   3 

Ожидаемый результат

name 1  | name 2 |count
--------+--------+-----
Renato  | John   |  2
Renato  | Paul   |  1
John    | Renato |  2 
John    | Paul   |  2
Paul    | Renato |  1
Paul    | John   |  2

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 13 января 2012
SELECT n1.name AS "name 1", n2.name AS "name 2",
    COUNT(*) AS "count"
FROM "names" AS n1
JOIN "names" AS n2
    ON n1.group = n2.group
WHERE n1.name <> n2.name
GROUP BY n1.name, n2.name
1 голос
/ 13 января 2012
SELECT 
  lefttbl.name as name_1,
  righttbl.name as name_2,
  count(*) as together_count
FROM
  xx AS lefttbl
  INNER JOIN xx AS righttbl on lefttbl.group=righttbl.group
WHERE lefttbl.name<>righttbl.name
GROUP BY name_1,name_2
;

Дает вам желаемую структуру.Я обновил SQL, чтобы убрать необходимость в кавычках, чтобы удовлетворить тех, кто способен правильно определить несовместимость цитат, но не желает ее исправлять.

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