2

このテーブル「Ratings」には、USER_ID、Artist_ID、およびRating(int、ユーザーによって割り当てられたスコア)が含まれています。そしてもちろん、テーブル「Artists」とフィールド「ID」および「Name」。

アーティストごとのAVGスコアでソートされた、アーティスト名の降順リストを取得しようとしています。最初はこれはそれほど難しいことではないと思いましたが、私はいじり続けます...

これが私が立ち往生しているところです。複数回発生するIDのAVG()を計算する方法を理解する必要があります。また、DISTINCTキーワードを使用してさまざまなクエリを試しましたが、成功しませんでした。

例えば:

SELECT Name, Rating
FROM Artists as a
INNER JOIN Ratings as r
ON a.ID = r.Artists_ID 
ORDER BY r.Rating DESC;

結果を教えてください:

Name                Rating
"The Mars Volta"    9.5
"Simon Felice"      9.0
"Laura Gibson"      8.0
"Calexico"          7.0
"Mira"              7.0
"Guido Belcanto"    6.0
"Guido Belcanto"    1.0

ご覧のとおり、アーティスト「GuidoBelcanto」には1つ以上の評価があります。現時点では、複数回発生するIDのAVG()を計算する方法がわかりません。おそらく基本的なMySQLですが、間違った方向に検索している可能性があります

4

2 に答える 2

3

クエリを忘れて、GROUP BY実際に(AVG関数を使用して)取得した評価の平均を計算しました。

SELECT Name, AVG(Rating) AS AVGRating
FROM Artists as a
INNER JOIN Ratings as r
    ON a.ID = r.Artists_ID
GROUP BY Name
ORDER BY AVGRating DESC;

アーティストのテーブルのキーでグループ化する方がおそらく良いでしょうが(十分なデータがあれば、同じ名前のアーティストが複数いることは考えられません)。

于 2012-05-22T00:39:50.207 に答える
0

アーティストごとに評価をグループ化して、各グループの評価の平均を計算し、それをアーティストと結合して、各IDに関連付けられた名前を取得できるようにします。

于 2012-05-22T00:40:43.010 に答える