Mysql many-to-many получить количество пересечений

286
25 апреля 2017, 06:44

Добрый день! Столкнулся с проблемой и не могу составить корректный запрос в базу (не могу понять логику запроса) Есть такая схема:

CREATE TABLE users(
    id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL
);
CREATE TABLE groups(
    id INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL
);
CREATE TABLE users_groups (
    user_id INT(10) NOT NULL, 
    group_id INT(10) NOT NULL
);
insert into `users` ( `id`, `name`) values 
(1, 'User#1'), (2, 'User#2'), (3, 'User#3'), (4, 'User#4'), (5, 'User#5'), (6, 'User#6'), (7, 'User#7'), (8, 'User#8'), (9, 'User#9'), (10, 'User#10')
;
insert into `groups` ( `id`, `name`) values 
(1, 'Group#1'), (2, 'Group#2'), (3, 'Group#3'), (4, 'Group#4'), (5, 'Group#5')
;
insert into `users_groups` ( `user_id`, `group_id`) values 
(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), 
(2, 2), (2, 3), (2, 4), (2, 5), 
(3, 1), (3, 2), (3, 3), (3, 4),
(4, 1), (4, 2), (4, 3), (4, 4),
(5, 2), (5, 3), (5, 4), (5, 5), 
(6, 1), (6, 2), (6, 5), 
(7, 1), (7, 4), (7, 5), 
(8, 2), (8, 3), (8, 4), (8, 5), 
(9, 1), (9, 2), (9, 3), (9, 4), (9, 5), 
(10, 2), (10, 4)
;

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

На примере моих данных, это будут пользователи под номером 1 и 9.

Answer 1

Если учитывать разницу не надо, а только совпадения, то:

select a.user_id, b.user_id, count(1)
  from users_groups a
  join users_groups b on b.group_id=a.group_id and a.user_id<b.user_id
 group by a.user_id, b.user_id
 order by count(1) desc
 limit 1

таблицы пользователей и/или групп доклеить по вкусу

READ ALSO
Пустые строки с команды LOAD DATA LOCAL INFILE

Пустые строки с команды LOAD DATA LOCAL INFILE

Есть текстовый файл внутри текстового файла очень много информации простым набором или копипастом человек долго будет мучатьсяРешил воспользоваться...

266
MPAndroidChart добавить в метку Image

MPAndroidChart добавить в метку Image

Использую BarChart библиотеки compile 'comgithub

268