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 つのトラックから平均評価を取得したいと言うべきかもしれません。そのため、タイトルのトラック 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 に答える