Как рассчитать агрегат по внутреннему объединению - PullRequest
1 голос
/ 27 апреля 2020

У меня есть две таблицы, сообщение и комментарий. Таблица сообщений содержит информацию о сообщениях, а таблица комментариев содержит данные комментариев к каждому сообщению. Ниже приведена структура,

Post Table
post_id (Primary Key), post_title, post_description

Comment Table
comment_id (Primary Key), comment_text, fk_post_id (Foreign Key)

Мне нужно взять post_id, post_title из таблицы сообщений и общее количество комментариев (с использованием общего количества функций) для каждого сообщения из таблицы комментариев и сделать так, чтобы данные отображались следующим образом. .

Post_ID   Post_Title   Total_Comments
1         ABC           4 
2         XYZ           5
3         123           3

Общее количество комментариев будет взято из таблицы комментариев путем подсчета всех строк указанного c post_id.

Мне удалось написать запрос внутреннего соединения, но я не знаю как и где поставить агрегатную функцию «считать», чтобы получить общее количество всех комментариев. Ниже мой запрос,

select post.post_id, post.post_title, comment.comment_id from post INNER JOIN comment on 
post.post_id = comment.fk_post_id ;

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Вы почти у цели. Просто добавьте к вашему запросу предложение GROUP BY, в котором перечислены столбцы из таблицы post, и используйте count() для подсчета количества записей, принадлежащих каждой группе.

select 
    p.post_id, 
    p.post_title, 
    count(*) no_comments
from post p
inner join comment c on p.post_id = c.fk_post_id
group by p.post_id

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

Вы также можете использовать для этого подзапрос, что исключает необходимость во внешней агрегации:

select 
    p.*,
    (select count(*) from comment c where p.post_id = c.fk_post_id) no_comments
from post
0 голосов
/ 27 апреля 2020
SELECT post.post_id
,post.post_title
,COUNT(comment.comment_id) as Total_coments 
FROM post 
INNER JOIN comment on  post.post_id = comment.fk_post_id 
GROUP BY post.post_id, post.post_title

Я настоятельно рекомендую прочитать о агрегатных функциях.

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