根据MySQL表的平均评分排序的艺术家名单

问题描述:

我有这张表包含USER_ID,Artist_ID和Rating(int,由用户分配的分数)的“Ratings”。当然还有一张桌子“艺术家”,其中包括一个“ID”和“名字”字段。根据MySQL表的平均评分排序的艺术家名单

我想要获得一个降序艺人名单,按艺术家的AVG分数排序。首先,我认为这不会很难,但我继续摆弄...

这里是我卡住的地方。我必须弄清楚它如何计算多次出现的id的AVG()。我尝试了使用DISTINCT关键字的各种查询,但没有取得成功。

例如:

SELECT Name, Rating 
FROM Artists as a 
INNER JOIN Ratings as r 
ON a.ID = r.Artists_ID 
ORDER BY r.Rating DESC; 

给我的结果:

Name    Rating 
"The Mars Volta" 9.5 
"Simon Felice"  9.0 
"Laura Gibson"  8.0 
"Calexico"   7.0 
"Mira"    7.0 
"Guido Belcanto" 6.0 
"Guido Belcanto" 1.0 

正如你所看到的,艺术家 “圭多·贝尔坎图” 已超过1个评级。目前我还不知道如何计算出现多次这些ID的AVG()。这也可能是基本的MySQL,但我可能在错误的方向搜索

您对您的查询忘了GROUP BY和实际计算收视率,你在(与AVG功能)拉平均:

SELECT Name, AVG(Rating) AS AVGRating 
FROM Artists as a 
INNER JOIN Ratings as r 
    ON a.ID = r.Artists_ID 
GROUP BY Name 
ORDER BY AVGRating DESC; 

虽然根据艺术家的表格的关键来做这个小组可能会更好(拥有足够的数据,拥有几个同名的艺术家是不可想象的)。

+0

谢谢! GROUP BY正是我所需要的 – JSS

+0

很高兴知道它的工作。不要忘记接受答案:D – Toote

按艺术家对收视率进行分组,以便计算每个组的收视率的平均值,并将其与艺术家结合以获取与每个ID相关联的名称。