如何将JOIN与COUNT函数结合,统计博客的点赞与点踩数量?
博客点赞与点踩统计的SQL实现
要查询所有博客并同时展示点赞、点踩总数,核心是用LEFT JOIN关联两张表,再结合条件聚合函数区分两类统计,具体实现如下:
方案一:使用COUNT + CASE WHEN
SELECT b.id, b.article, COUNT(CASE WHEN be.is_like = TRUE THEN 1 END) AS like_count, COUNT(CASE WHEN be.is_like = FALSE THEN 1 END) AS dislike_count FROM blogs b LEFT JOIN blog_eval be ON b.id = be.blog_id GROUP BY b.id, b.article;
关键逻辑说明:
LEFT JOIN:保证即使没有任何评价的博客也会被纳入结果,这类博客的点赞/点踩数会显示为0CASE WHEN:精准筛选出点赞(is_like=TRUE)或点踩(is_like=FALSE)的记录,不满足条件时返回NULLCOUNT:自动忽略NULL值,只统计符合条件的有效评价数量GROUP BY:按博客的id和article分组,确保每个博客只返回一条统计结果
方案二:使用SUM + CASE WHEN
如果更习惯用累加的方式统计,也可以用SUM替代COUNT:
SELECT b.id, b.article, SUM(CASE WHEN be.is_like = TRUE THEN 1 ELSE 0 END) AS like_count, SUM(CASE WHEN be.is_like = FALSE THEN 1 ELSE 0 END) AS dislike_count FROM blogs b LEFT JOIN blog_eval be ON b.id = be.blog_id GROUP BY b.id, b.article;
逻辑说明:
- 符合点赞/点踩条件时返回1,否则返回0
SUM将这些数值累加,得到最终的统计总数,效果和方案一完全一致
内容的提问来源于stack exchange,提问作者malbo
相关产品推荐
相关产品推荐

