2016-09-09 3 views
0

秒台の最高値を保つ私はからユーザが達成された最高のスコアを選択する必要があり、私のテーブルはグループ最初のテーブルの上によると、ここで

+----------+-----------+ 
| id  | user_id | 
+----------+-----------+ 
| 1  |  1  | 
+----------+-----------+ 
| 2  |  1  | 
+----------+-----------+ 
| 3  |  1  | 
+----------+-----------+ 
| 4  |  2  | 
+----------+-----------+ 
| 5  |  2  | 
+----------+-----------+ 
| 6  |  2  | 
+----------+-----------+ 
| 7  |  3  | 
+----------+-----------+ 
| 8  |  3  | 
+----------+-----------+ 
| 9  |  3  | 
+----------+-----------+ 

私の第二のテーブル

+----------+---------+ 
| id  | score | 
+----------+---------+ 
| 1  | 10 | 
+----------+---------+ 
| 2  | 20 | 
+----------+---------+ 
| 3  |  5 | 
+----------+---------+ 
| 4  | 40 | 
+----------+---------+ 
| 5  | 15 | 
+----------+---------+ 
| 6  | 10 | 
+----------+---------+ 
| 7  |  5 | 
+----------+---------+ 
| 8  | 30 | 
+----------+---------+ 
| 9  | 10 | 
+----------+---------+ 

ですこれらのテーブル。ここで

が私のMySQLクエリです

SELECT * FROM 
table_1 AS t1 
INNER JOIN 
table_2 AS t2 ON 
t1.id = t2.id 
WHERE t2.score > 10 
GROUP BY t1.user_id 
ORDER BY t2.score DESC 

私の欲求の結果は

+----------+-----------+---------+ 
| id  | user_id | score | 
+----------+-----------+---------+ 
| 4  |  2 | 40 | 
+----------+-----------+---------+ 
| 8  |  3 | 30 | 
+----------+-----------+---------+ 
| 2  |  1 | 20 | 
+----------+-----------+---------+ 

あるしかし、私は得ることは私MySQLはいつものtable_1から最低idを選択している

+----------+-----------+---------+ 
| id  | user_id | score | 
+----------+-----------+---------+ 
| 4  |  2 | 40 | 
+----------+-----------+---------+ 
| 1  |  1 | 10 | 
+----------+-----------+---------+ 
| 7  |  3 |  5 | 
+----------+-----------+---------+ 

ですGROUP BY句を使用しています

私はこの

SELECT *, MAX(t2.score) AS max_score FROM 
table_1 AS t1 
INNER JOIN 
table_2 AS t2 ON 
t1.id = t2.id 
WHERE t2.score > 10 
GROUP BY t1.user_id 
ORDER BY t2.score DESC 
LIMIT 10 

ようMAXコマンドを使用してみました、結果は私は私はそれが非常に簡単取得したい結果を信じているが、私はどこにも存在してい

+----------+-----------+---------+-----------+ 
| id  | user_id | score | max_score | 
+----------+-----------+---------+-----------+ 
| 4  |  2 | 40 | 40  | 
+----------+-----------+---------+-----------+ 
| 1  |  1 | 10 | 20  | 
+----------+-----------+---------+-----------+ 
| 7  |  3 |  5 | 30  | 
+----------+-----------+---------+-----------+ 

を取得しています。

この質問は、重複マークされていたが、残念ながら私はその特定のページ上の任意の解決策を見つけることができませんでした1

更新。

私が試しているクエリですが、失敗します。

SELECT * AS max_score FROM 
table_1 AS t1 
INNER JOIN 
(
SELECT *, MAX(score) AS max_score 
FROM table_2 
GROUP BY t1.user_id 
) AS t2 
ON 
t1.id = t2.id 
WHERE t2.score > 10 
ORDER BY t2.score DESC 
LIMIT 10 

それは私がtable_2とグループでtable_1であるuser_idによって結果である列scoreから最高値を取得しようとしているUnknown column t1.user_id

私にエラーを与えます。

これらのページに記載されている例は、1つのテーブルのみを対象としており、私のシナリオではその作業を行います。

+0

@Barmarあなたは再質問をチェックして、このことから、重複するタグを削除するか、シナリオの同じ種類を表すいくつかの別のQ/Aにリダイレクトしたいですか? – Anuj

+0

質問を誤解しましたか? 2つのテーブルを結合した後、各user_idグループ内でスコアが最も高い行が必要になります。もう1つの質問は、各グループの列の最大値を持つ行を取得する方法を示しています。 – Barmar

+0

はい@barmar私は正確に各ユーザーグループの最高得点が必要です。私のコラムスコア(ここではMAXを適用)とユーザーID(ここでGROUP BYを適用)は2つの異なるテーブルにあります。あなたが同じ種類の状況で私をいくつかのページにリダイレクトすることができれば幸いです。 – Anuj

答えて

1

user_idの最大得点を取得するサブクエリを作成します。それからテーブルに参加して、その最大得点の行を取得します。

SELECT t1.id, t1.user_id, max_score 
FROM table_1 AS t1 
JOIN table_2 AS t2 ON t1.id = t2.id 
JOIN (
    SELECT t1.user_id, MAX(t2.score) AS max_score 
    FROM table_1 AS t1 
    JOIN table_2 AS t2 on t1.id = t2.id 
    GROUP BY t1.user_id) AS t_max 
ON t1.user_id = t_max.user_id AND t2.score = t_max.max_score 

DEMO

+0

正確に私が必要とするもの。あなたの努力を本当に感謝します。 – Anuj

関連する問題