php - mysql显示所有行的计算平均值

标签 php mysql math average rating

表结构

rating.post_id
rating.user_id
rating.rate_like
rating.rate_dislike

示例数据:

rating.post_id = 1
rating.user_id = 1
rating.rate_like = 1
rating.rate_dislike = 0

rating.post_id = 1
rating.user_id = 2
rating.rate_like = 1
rating.rate_dislike = 0

rating.post_id = 1
rating.user_id = 3
rating.rate_like = 0
rating.rate_dislike = 1

鉴于上述结构,帖子 1 由用户 1、2 和 3 评分,其中用户 1 和 2 投赞成票,而用户 3 投反对票。

有了这个,如何获得五 (5) 星评级的平均值?

公式: (((total rate_like/total votes) * 100) * 0.5)/10 = Rate(四舍五入到最接近的 .5)

例子: (((2/3) * 100) * 0.5)/10 = 3.33(四舍五入为 3.5)

评分为 3.5 星(满分 5 星)

预期的 mysql 输出将是:

post_id = 1
rate_like = 2
rate_dislike = 1
total_rating = 3.5

这是我对 sql 所做的,但我不知道如何将它变成一个 sql 语句。

这得到平均值:

从评分组中选择 round(round(((sum(rate_like)/(sum(rate_like) + sum(rate_dislike)) * 100) * 0.5)/10) * 2)/2, 1)通过 post_id

其中应合并到此语句中:

SELECT post_id, sum(rate_like), sum(rate_dislike), (sum(rate_like) + sum(rate_dislike)) from rating group by post_id

合并这两个语句会产生错误subquery returns more than 1 row:

SELECT post_id, sum(rate_like), sum(rate_dislike), (sum(rate_like) + sum(rate_dislike)), (select round(round((((sum(rate_like)/(sum(rate_like) + sum(rate_dislike)) * 100) * 0.5)/10) * 2)/2, 1) 来自 post_id 评分组)来自 post_id 评分组

在两个 select 语句上添加一个 where 子句解决了这个问题,但它需要显示多行。

最佳答案

没关系......能够解决这个问题。子查询用作连接表而不是列。

选择 评分.post_id, 总和(rate_like), 总和(rate_dislike), (总和(喜欢率)+总和(不喜欢率)), column_rating 从评级 内部联接 ( 选择 post_id, round(round((((sum(rate_like)/(sum(rate_like) + sum(rate_dislike)) * 100) * 0.5)/10) * 2)/2, 1) 作为column_rating 来自 post_id 的评分组 ) 作为 rating_table 关于 rating.post_id = rating_table.post_id 按 rating.post_id 分组

关于php - mysql显示所有行的计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066792/

相关文章:

mysql - 导致双行的原因以及受代码约束时如何修复

php - 使用 SUM 基于时间范围显示数据

php - 如何在 PHP 中选择匹配的 session 用户值到非 session 用户

javascript - 转换 2 :1 equirectangular panorama to cube map

php - 将图像链接到 WordPress 模板中的外部 url

php - AJAX 安全帮助

php - 隐藏文件夹内容但保持文件可访问

php - 模型事件没有触发

c# - 如何固定变量的精度

java - 用java计算折扣系数