MySQL запрос - PullRequest
       9

MySQL запрос

0 голосов
/ 18 июня 2009

У меня есть такая таблица:

col1   col2

2001   3001
2002   3001
2003   3001
2004   3002
2002   3003
2001   3003

Я хочу создать запрос, который обнаруживает все комбинации элементов в столбце col1 с определенным элементом в столбце col1, если они встречаются с одним и тем же элементом в столбце col2 и частотой появления. Например, если мы хотим исследовать номер элемента "2001" в столбце col1, запрос должен вернуть:

col3   col4   col5
2001   2002   0.667
2001   2003   0.333

Может кто-нибудь дать мне подсказку? Спасибо вперед.

1 Ответ

1 голос
/ 18 июня 2009

Думая об этом таким образом, вы пытаетесь связать таблицу с самим собой через col2, поэтому мы начнем с соединения с самим собой:

select left.col1, right.col1/*, ...*/ from table left inner join table right on left.col2 = right.col2 where left.col1 = '2001' /* ... */

Теперь для вашей совокупности. Вы хотите объединить все right.col1, чтобы получить счет для этого столбца:

select left.col1, right.col1, COUNT(*) from table left inner join table right on left.col2 = right.col2 where left.col1 = '2001' group by right.col2

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

Как примечание, это было бы намного сложнее, если бы col1 не был постоянным.

Отредактировано для добавления : Если вы ищете один запрос, вместо того, чтобы повторять его на любом языке, с которого вы запрашиваете, вам потребуется выполнить эту группировку дважды:

SELECT abs_freq.col1, abs_freq.col2, abs_freq.freq / totals.total
FROM (SELECT
       left.col1 AS col1,
       COUNT(*)  AS total
      FROM TABLE LEFT
      INNER JOIN TABLE RIGHT
        ON left.col2 = right.col2
      WHERE left.col1 = '2001'
      GROUP BY left.col1
      ) totals
INNER JOIN (SELECT
              left.col1  AS col1,
              right.col1 AS col2,
              COUNT(*)   AS freq
            FROM TABLE LEFT
            INNER JOIN TABLE RIGHT
              ON left.col2 = right.col2
            WHERE left.col1 = '2001'
            GROUP BY right.col2
            ) abs_freq
   ON abs_freq.col1 = totals.col1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...