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_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
如果你还想知道可以加入的成员的详细信息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。
如何计算平均评分,然后按最高平均评分和得票数排序?
以下是我到目前为止的...
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_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
如果你还想知道可以加入的成员的详细信息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。