问题:为每位艺术家返回其相册中的平均曲目数。 鉴于:
艺术家(身份证,姓名)
专辑(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()方法的去向。
答案 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
中的计算。