|
|
|
Пересечение множеств на основе данных из второго столбца
|
|||
|---|---|---|---|
|
#18+
Всем дня. У меня вопрос в студию - как я могу получить пересечение множеств для таблицы с именем test: +-------------+ | col1 | col2 | +-------------+ | 1 | 1 | | 1 | 2 | | 1 | 3 | | 1 | 4 | | 1 | 5 | | 1 | 6 | | 2 | 7 | | 3 | 12 | | 4 | 9 | | 4 | 1 | | 4 | 2 | | 5 | 11 | | 6 | 30 | | 7 | 2 | | 8 | 1 | +-------------+ Допустим, я говорю -- давай мне все пересечения для "col1 со значением 1" с остальными из столбца col1 на основе данных из столбца col2. Таким образом я должен получить все значения col1(кроме самого "col1 1") которые имеют схожие с "col1 1" значения в поле col2: (1,2,3,4,5,6) ∩ 2:(7) ∩ 3:(12) ∩ 4:(9,1,2) ∩ 5:(11) ∩ 6:(30) ∩ 7:(2) ∩ 8:(1) в итоге, пересекаются всего 3 значения из 7 находящиеся в col1: 4:(1,2) 7:(2) 8:(1) В БД на выходе: +------+ | col1 | +------+ | 4 | | 7 | | 8 | +------+ Мне нужны только первые 10 строк (но самые релевантные -- с самым большим количеством пересечений). Желательно производительное решение, так как таких строк может быть от сотен тысяч до десятка миллионов. Идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2013, 19:35:59 |
|
||
|
Пересечение множеств на основе данных из второго столбца
|
|||
|---|---|---|---|
|
#18+
_undefined, Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2013, 20:05:14 |
|
||
|
Пересечение множеств на основе данных из второго столбца
|
|||
|---|---|---|---|
|
#18+
Огромное Вам спасибо за помощь! Вот еще решение: <code> SELECT t2.col1, COUNT(*) int_size, GROUP_CONCAT(t2.col2) FROM test t1 JOIN test t2 ON t1.col2 = t2.col2 WHERE t1.col1 = 1 AND t2.col1 != 1 GROUP BY t2.col1 ORDER BY int_size DESC LIMIT 10 </code> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2013, 20:38:26 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38450543&tid=1835800]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 322ms |

| 0 / 0 |
