GROUP BY на нескольких объединениях - PullRequest
0 голосов
/ 20 июня 2019

Я искал проблему, но не смог найти работающее решение.

У меня есть 3 таблицы: пользователь, сообщение, комментарии.

select u.id user
     , p.id post
     , c.id comm
  from USer u
  join Post p
    on u.id = p.user_id
  join Comments c
    on p.id = c.post_id;

Это дает мне вывод с 3 столбцами, который связывает пользователя с сообщениями, которые он имеет, и комментариями, полученными по каждому.

О / р как:

user    post    comm
1    1    4
1    1    5
1    1    7
1    1    8
2    5    11
2    5    12
2    7    13

Я хотел найти пользователя с максимальным количеством общих комм. Для этого GROUP BY на пользователя не работает. Что может быть альтернативой для задачи?

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете использовать GROUP BY, ORDER BY и LIMIT:

select p.user_id, count(*) as num_comments
from Post p inner join
     Comments c
     on p.id = c.post_id
group by p.user_id
order by num_comments desc
limit 1;

Обратите внимание, что, поскольку вам нужен только идентификатор пользователя, вам не нужна таблица user, потому что user_id находится в post.

...