0

我想出了另一个问题。我正在尝试设计一个 MySql 查询。

我在评级表中有一个Users表和一个Ratingsuser_id作为外键。

现在我必须得到平均评分最高的用户

所以我做了:

SELECT blah blah FROM Users USR
INNER JOIN Ratings RTN on USR.id = RTN.user_id
order by avg(RTN.rating)

但我觉得这是错误的,它也不起作用。有没有办法让用户按他们收到的平均评分按降序排序?

问候希曼舒夏尔马。

4

3 回答 3

1

您可以使用计算平均评分的内联视图,然后如果要包含评分数据,则加入该视图。

SELECT blah blah 
FROM Users USR
   INNER JOIN Ratings RTN 
   ON USR.id = RTN.user_id
  INNER JOIN (SELECT avg(RTN.rating) Avg_rating 
              FROM Ratings RTN
              GROUP BY 
                rtn.user_id) a_rtn
  ON  USR.id = A_RTN.user_id

ORDER BY avg(A_RTN.AVg_rating) DESC

如果您只需要用户数据而不是只需要标准的 Group By

SELECT USR.First_name, USR.Last_name, etc
FROM Users USR
   INNER JOIN Ratings RTN 
   ON USR.id = RTN.user_id

GROUP BY 
   USR.First_name, USR.Last_name, etc    
ORDER BY avg(A_RTN.AVg_rating) DESC
于 2012-05-10T20:27:55.743 回答
1

您的查询实际上似乎不是很错误(作为开始),我会这样写:

SELECT USR.id, AVG(RTN.rating) AS avg_rating
FROM Users USR
INNER JOIN Ratings RTN ON USR.id = RTN.user_id
GROUP BY USR.id
ORDER BY avg_rating DESC
LIMIT 1
于 2012-05-10T20:29:29.080 回答
1
    select blah, blah
    from users usr
    join (
    select rtn.user_id, avg(rtn.rating) as avg_rating
    from users usr
    join ratings rtn on usr.id = rtn.user_id
    group by rtn.user_id
    ) t on t.user_id = usr.id 
    order by avg_rating desc
于 2012-05-10T20:31:08.970 回答