表结构
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/