mysql:如何编写取数和平均值的查询

rbl8hiat  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(541)

问:返回每位艺术家专辑的平均曲目数。鉴于:
艺术家(身份证、姓名)
相册(id,标题)
艺术家专辑(艺术家id,专辑id)
曲目(曲目标题、专辑id、数字)
我想要一个表格,显示艺术家的名字和他们专辑中的平均曲目数,这意味着一个艺术家可以有多张专辑,每张专辑中有多首歌曲,我们需要所有专辑中的平均曲目数。

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()方法去了哪里。

z5btuh9x

z5btuh9x1#

你实际上比你想象的要近。平均曲目数是曲目总数除以专辑数。您可以将其作为:

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 .

相关问题