MySQL:如何编写取平均数字总和的查询

时间:2018-04-16 00:46:45

标签: mysql sql

问题:为每位艺术家返回其相册中的平均曲目数。 鉴于:

艺术家(身份证,姓名)
专辑(id,title)
artist_album(artist_id,album_id)
track(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);

而不是给我平均的曲目数量,例如Bob Marley可能有4首不同专辑的13首歌曲,它应该给我3.25,但在这种情况下它给了我13。所以我不确定AVG()方法的去向。

1 个答案:

答案 0 :(得分:0)

你实际上比你想象的更接近。平均曲目数是曲目总数除以专辑数。你可以这样做:

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中的计算。