MySQL关联表计算平均评分并按评分与投票数排序的技术问询
如何计算用户平均评分并按规则排序?
嘿,我来帮你搞定这个评分统计的需求!先理清楚你的两张表结构:
表结构展示
members表
| ID | name |
|---|---|
| 1 | Andrew |
| 2 | Anthony |
| 3 | John |
| 4 | Jane |
member_ratings表
| ID | id_gave_rating | id_rated | rating |
|---|---|---|---|
| 1 | 1 | 2 | 1 |
| 2 | 2 | 3 | 4 |
| 3 | 3 | 4 | 3 |
| 4 | 4 | 2 | 5 |
你当前的SQL语句只是关联了两张表,但还没做聚合统计。要实现按平均评分从高到低、投票数排序的需求,我们需要用到聚合函数和分组查询,调整后的SQL如下:
SELECT m.id_rated, AVG(m.rating) AS avg_rating, COUNT(*) AS votes FROM member_ratings AS m -- 如果需要显示被评分用户的名字,可以加入下面的JOIN语句 -- JOIN members AS c1 ON m.id_rated = c1.id GROUP BY m.id_rated ORDER BY avg_rating DESC, votes DESC;
语句解释
GROUP BY m.id_rated:按照被评分用户的ID分组,这样我们能单独计算每个用户的评分数据AVG(m.rating) AS avg_rating:计算每组(每个被评分用户)的平均评分COUNT(*) AS votes:统计每个用户获得的投票总数ORDER BY avg_rating DESC, votes DESC:先按平均评分从高到低排序,当平均评分相同时,按投票数从多到少排序,完全匹配你想要的排序规则
执行后得到的结果
| id_rated | avg_rating | votes |
|---|---|---|
| 3 | 4.0 | 1 |
| 2 | 3.0 | 2 |
| 4 | 3.0 | 1 |
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

