如何按postid统计点赞/点踩数量占比?现有SQL查询需优化
解决方案:单SQL语句统计点赞/点踩数量及占比
看起来你现在分两次查询点赞和点踩数据,还没法直接计算占比对吧?咱们可以用条件聚合写一条SQL就能一次性搞定每个post的点赞数、点踩数、总互动量,以及各自的占比。
直接上可用的SQL语句:
SELECT postid, COUNT(CASE WHEN type = 1 THEN 1 END) AS cntLikes, COUNT(CASE WHEN type = 0 THEN 1 END) AS cntUnlikes, COUNT(*) AS totalInteractions, ROUND(COUNT(CASE WHEN type = 1 THEN 1 END) * 100.0 / COUNT(*), 2) AS likePercentage, ROUND(COUNT(CASE WHEN type = 0 THEN 1 END) * 100.0 / COUNT(*), 2) AS unlikePercentage FROM like_unlike GROUP BY postid;
关键部分解释:
COUNT(CASE WHEN type = 1 THEN 1 END):只统计type=1(点赞)的记录,得到每个post的点赞总数cntLikesCOUNT(CASE WHEN type = 0 THEN 1 END):同理统计type=0(点踩)的记录数,得到cntUnlikesCOUNT(*):计算当前post的总互动次数(点赞+点踩的总和)ROUND(..., 2):把占比结果四舍五入到两位小数,方便阅读;乘以100.0是为了避免整数除法导致的精度丢失,确保得到正确的百分比数值
针对你的测试数据,执行后会得到如下结果:
| postid | cntLikes | cntUnlikes | totalInteractions | likePercentage | unlikePercentage |
|---|---|---|---|---|---|
| 20 | 2 | 1 | 3 | 66.67 | 33.33 |
| 21 | 1 | 2 | 3 | 33.33 | 66.67 |
这样你就不用再执行两次查询手动合并数据了,一条SQL就能拿到所有你需要的统计信息~
内容的提问来源于stack exchange,提问作者drubecepha
相关产品推荐
相关产品推荐

