问题:向每位艺术家返回他们专辑中的平均曲目数量。
鉴于:

艺术家(编号,姓名)

相册(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/

10-16 13:37