I have two tables, Post & Comment. Post table contains info about posts & comment table contains the comments data about each post. Below is there structure,
Post Table post_id (Primary Key), post_title, post_description Comment Table comment_id (Primary Key), comment_text, fk_post_id (Foreign Key)
I need to take post_id, post_title from post table and total no of comments (using aggregate function count) on each post from comment table & want the data to be showed like this.
Post_ID Post_Title Total_Comments 1 ABC 4 2 XYZ 5 3 123 3
Total comments will be taken from the comments table by counting all the rows of a specific post_id.
I have managed to write a inner join query but dont know how and where to put aggregate function “count” to get total of all comments. Below is my query,
select post.post_id, post.post_title, comment.comment_id from post INNER JOIN comment on post.post_id = comment.fk_post_id ;
Thanks.
Advertisement
Answer
You are almost there. Just add a GROUP BY clause to your query that lists columns coming from the post table, and use count() to count how many records belong to each group.
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
Note that I added table aliases to the query, to make it shorter to read and write.
You could also use a subquery for this, which avoids the need for outer aggregation:
select
p.*,
(select count(*) from comment c where p.post_id = c.fk_post_id) no_comments
from post