[英]MySQL Joining Table, Find Average Rating, and Rank
How do you calculate the average rating, then order by the highest average rating and number of votes?您如何计算平均评分,然后按最高平均评分和投票数排序?
Below is what I have so far...以下是我到目前为止所拥有的...
members
table members
表
ID | name
---+------
1 | Andrew
2 | Anthony
3 | John
4 | Jane
member_ratings
table 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
current query当前查询
$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";
Targeted result目标结果
id_rated | avg_rating | votes
---------+------------+--------
3 | 4 | 1
2 | 3 | 2
4 | 3 | 1
You must group by id_rated
in member_ratings
and aggregate:您必须在 member_ratings 中
group by id_rated
member_ratings
并聚合:
select id_rated,
avg(rating) avg_rating,
count(*) votes
from member_ratings
group by id_rated
order by avg_rating desc, votes desc
If you want also the details of the member you can join to members
:如果您还想要会员的详细信息,您可以加入
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
Or:或者:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.