2012-05-10 77 views
0

我想出了另一个问题。我试图设计一个MySql查询。按聚合函数排序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) 

,但我觉得这是错误的,它也没有工作either.Is有一种方式来获得用户按照降序排列的平均收视率排序?

Regards Himanshu Sharma。

+4

是的,你需要做的其实聚集。 MySQL允许你使用聚合函数,而不需要'GROUP BY',这是非常无用的。 – JNK

+0

感谢您的关注@JNK如果我们选择avg where userid = some value,那么该怎么办呢?这种情况并不需要 –

+1

的一个小组是的,但是如果你有任何未聚合的字段,MySQL只会让你这么做。 – JNK

回答

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 
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 

如果你只想用户数据比你只需要一个标准组通过

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 
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