0

最初にテーブル構造を示します(関連するフィールドのみが言及されます)

/* The table Users */

user_id | user_name | user_registration_date
1       | USER1     | 19/09/2010
2       | USER2     | 20/09/2010


/* The table Levels_Completed */

user_id | level_id
1       | 1
1       | 2
2       | 1

スコアボードを表示したいのですが。リストの最初のユーザーは、彼が完了したレベルの数が最も多いユーザーになります。上記の例では、USER1はUSER2の上に表示されます。

次のデータを受け取りたい:

user_id, user_name, user_registration_date, COUNT(level_id rows) AS score

受け取ったSQL行ごとに、スコアの数順に並べられています。例:

1 | USER1 | 19/09/2010 | 2
2 | USER2 | 20/09/2010 | 1

使い方は知ってINNER JOINいますが、カウントと順序は現在のレベルを上回っていると思います。助けてください?

4

3 に答える 3

2
SELECT Users.user_id, user_name, user_registration_date, COUNT(level_id) AS score
FROM Users INNER JOIN Levels_Completed ON Users.user_id = Levels_Completed.user_id
GROUP BY Users.user_id, user_name, user_registration_date
于 2012-12-31T23:02:08.913 に答える
0

これを試して:

SELECT
   U.user_id,
   U.user_name,
   U.user_registration_date,
   COUNT(L.level_id) as score
FROM Users U
   LEFT JOIN Levels_Completed L
       ON U.User_Id = L.User_Id
GROUP BY U.user_id, U.user_name, U.user_registration_date
ORDER BY score DESC
于 2012-12-31T23:07:44.673 に答える
0
SELECT Users.user_id, user_name, user_registration_date, score
FROM Users
INNER JOIN (
  SELECT user_id, COUNT(level_id) AS score
  FROM Levels_Completed
  GROUP BY user_id)
USING (user_id)
ORDER BY score DESC
于 2012-12-31T23:09:34.297 に答える