MySQL 加入 Table、查找平均评分和排名

MySQL Joining Table, Find Average Rating, and Rank

如何计算平均评分,然后按最高平均评分和得票数排序?

以下是我到目前为止的...

members table

ID | name
---+------
 1 | Andrew
 2 | Anthony
 3 | John
 4 | Jane

member_ratings table

ID | id_gave_rating | id_rated | rating
---+----------------+----------+---------
 1 |        1       |     2    |    1
 2 |        2       |     3    |    4
 3 |        3       |     4    |    3
 4 |        4       |     2    |    5

当前查询

    $sql = "
    SELECT *, 
    m.id AS id, 
    c1.id AS id_rated, 
    c1.name AS name_rated
    FROM member_ratings AS m
    JOIN members AS c1 ON m.id_rated  = c1.id"; 

目标结果

id_rated | avg_rating | votes
---------+------------+--------
    3    |      4     |    1
    2    |      3     |    2
    4    |      3     |    1

您必须 group by id_ratedmember_ratings 和合计:

select id_rated, 
       avg(rating) avg_rating,
       count(*) votes
from member_ratings
group by id_rated
order by avg_rating desc, votes desc

如果你还想知道可以加入的成员的详细信息members:

select m.id, m.name, r.avg_rating, r.votes
from members m 
inner join (
  select id_rated, 
         avg(rating) avg_rating,
         count(*) votes
  from member_ratings
  group by id_rated
) r on r.id_rated = m.id
order by r.avg_rating desc, r.votes desc

或者:

select m.id, m.name, 
       avg(r.rating) avg_rating,
       count(*) votes
from members m inner join member_ratings r
on r.id_rated = m.id
group by m.id, m.name
order by avg_rating desc, votes desc

参见demo