问题:向每位艺术家返回他们专辑中的平均曲目数量。
鉴于:
艺术家(编号,姓名)
相册(ID,标题)
artist_album(artist_id,album_id)
曲目(track_title,album_id,num)
我想要一个表来显示歌手姓名及其在专辑中的平均曲目数量,这意味着一个歌手可以有多个专辑,每个专辑中包含多首歌曲,而我们需要所有专辑中曲目的平均数量。
SELECT artist.name, COUNT(track_title) as averageTracks
FROM artist
JOIN track
ON track.album_id = artist_album.album_id
JOIN artist_album
ON artist_album.artist_id = artist.id
GROUP BY artist.name
HAVING AVG(averageTracks);
而不是给我平均曲目数量,例如鲍勃·马利可能从4张不同的专辑中总共获得了13首歌曲,它应该给我3.25,但在这种情况下,它给了我13条。因此,我不确定AVG()方法的去向。
最佳答案
您实际上比您想像的要近。曲目的平均数是曲目总数除以专辑数。您可以这样获得:
SELECT a.name, COUNT(*) * 1.0 / COUNT(DISTINCT aa.album_id) as averageTracks
FROM artist a JOIN
artist_album aa
ON aa.artist_id = a.id JOIN
track t
ON t.album_id = aa.album_id
GROUP BY a.name;
当然,您的查询将不起作用,因为连接条件与表定义不符。
您的
HAVING AVG(averageTracks)
过滤结果。它不会更改SELECT
中的计算。关于mysql - MySQL:如何编写查询,取平均值的和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49848222/