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