这是我的SQL语句,但我无法让它工作。谁能告诉我我做错了什么?
SELECT AVG(R.Rating), R.Track_id, T.Title, T.Artist, G.Genre, T.Track_length, T.Track_release_date, A.Album, A.Album_release_date
FROM Track T, Genre G, Albums A
LEFT JOIN Rating ON Rating.Track_id = T.Track_id
WHERE G.Genre_id = T.Genre_id AND A.Album_id = T.Album_id AND T.Title = 'sometitle'
我或许应该告诉我,我希望得到1首曲目的平均评分。因此,如果标题的曲目编号为25,则应使用track_id 25查找每个评分,并对该选择进行平均。
答案 0 :(得分:3)
在包含非聚合字段的SELECT
中使用汇总函数时,您需要进行分组:
SELECT AVG(R.Rating), R.Track_id, T.Title, T.Artist, G.Genre, T.Track_length,
T.Track_release_date, A.Album, A.Album_release_date
FROM Track T, Genre G, Albums A
LEFT JOIN Rating R ON R.Track_id = T.Track_id
WHERE G.Genre_id = T.Genre_id
AND A.Album_id = T.Album_id
AND T.Title = 'sometitle'
GROUP BY R.Track_id, T.Title, T.Artist, G.Genre, T.Track_length,
T.Track_release_date, A.Album, A.Album_release_date
有关详细信息,请参阅MSDN。
您必须GROUP BY
SELECT
中不属于聚合函数的所有列。
答案 1 :(得分:0)
假设现代DBMS支持窗口功能,以下也应该这样做
SELECT AVG(R.Rating) over (partition by r.track_id) as avg_rating,
R.Track_id,
T.Title,
T.Artist,
G.Genre,
T.Track_length,
T.Track_release_date,
A.Album,
A.Album_release_date
FROM Track T
JOIN Genre G ON G.Genre_id = T.Genre_id
JOIN Albums A ON A.Album_id = T.Album_id
LEFT JOIN Rating R ON R.Track_id = T.Track_id
WHERE T.Title = 'sometitle'