根据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;
虽然根据艺术家的表格的关键来做这个小组可能会更好(拥有足够的数据,拥有几个同名的艺术家是不可想象的)。
答
按艺术家对收视率进行分组,以便计算每个组的收视率的平均值,并将其与艺术家结合以获取与每个ID相关联的名称。
谢谢! GROUP BY正是我所需要的 – JSS
很高兴知道它的工作。不要忘记接受答案:D – Toote