0

这是我的 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 首曲目中获得平均收视率。因此,如果标题的 track id 为 25,它应该查找 track_id 为 25 的每个评分并对该选择进行平均。

4

2 回答 2

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不在聚合函数中的列。

于 2013-01-30T12:56:14.430 回答
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'
于 2013-01-30T13:11:16.887 回答