0

私は別の質問を思いついた。私はMySqlクエリを考案しようとしています。

評価テーブルに外部キーとしてのテーブルとUsersテーブルがあります。Ratingsuser_id

今、私は最大の平均評価を持っているユーザーを取得する必要があります

だから私はしました:

SELECT blah blah FROM Users USR
INNER JOIN Ratings RTN on USR.id = RTN.user_id
order by avg(RTN.rating)

しかし、これは間違っていると思いますし、それも機能していません。ユーザーが受け取った平均評価を降順で並べ替える方法はありますか?

ひまんしゅシャルマよろしく。

4

3 に答える 3

1

あなたのクエリは実際には(最初は)それほど間違っているようには見えません、私はそれを次のように書きます:

SELECT USR.id, AVG(RTN.rating) AS avg_rating
FROM Users USR
INNER JOIN Ratings RTN ON USR.id = RTN.user_id
GROUP BY USR.id
ORDER BY avg_rating DESC
LIMIT 1
于 2012-05-10T20:29:29.080 に答える
1
    select blah, blah
    from users usr
    join (
    select rtn.user_id, avg(rtn.rating) as avg_rating
    from users usr
    join ratings rtn on usr.id = rtn.user_id
    group by rtn.user_id
    ) t on t.user_id = usr.id 
    order by avg_rating desc
于 2012-05-10T20:31:08.970 に答える
1

平均評価を計算するインラインビューを使用して、評価データを含める場合はそれに参加できます。

SELECT blah blah 
FROM Users USR
   INNER JOIN Ratings RTN 
   ON USR.id = RTN.user_id
  INNER JOIN (SELECT avg(RTN.rating) Avg_rating 
              FROM Ratings RTN
              GROUP BY 
                rtn.user_id) a_rtn
  ON  USR.id = A_RTN.user_id

ORDER BY avg(A_RTN.AVg_rating) DESC

標準のGroupByだけでなく、ユーザーデータだけが必要な場合

SELECT USR.First_name, USR.Last_name, etc
FROM Users USR
   INNER JOIN Ratings RTN 
   ON USR.id = RTN.user_id

GROUP BY 
   USR.First_name, USR.Last_name, etc    
ORDER BY avg(A_RTN.AVg_rating) DESC
于 2012-05-10T20:27:55.743 に答える