2016-11-29 2 views
0

以下に示すように、私は2つのテーブルを持っている:任意のPRIDについてプルMySQLの行

  Table Name : scores 
+-------+-----------+--------------+-----------+ 
| UNID | name | score  | PRID | 
+-------+-----------+--------------+-----------+ 
| 1 | name_1 |  93  |  1 | 
| 2 | name_2 |  71  |  1 | 
| 3 | name_3 |  53  |  2 | 
| 4 | name_4 |  82  |  2 | 
| 5 | name_5 |  31  |  2 | 
| 6 | name_6 |  68  |  3 | 
+-------+-----------+--------------+-----------+ 

そして

    Table Name : user_dir 
+-------+-----------+--------------+-----------+ 
| PRID | fname | city  | gender | 
+-------+-----------+--------------+-----------+ 
| 1 | fname1 |  XX  |  m | 
| 2 | fname2 |  YY  |  f | 
| 3 | fname3 |  ZZ  |  f | 
+-------+-----------+--------------+-----------+ 

user_dirをから、どのようにすることができ私はの得点の最高値に対応する行全体をPRIDにしますか?例として

は、2のPRIDをユーザ「fname2」ため、私は次のように、この行全体(および スコアだけでなく、値)を引くしたい:

+-------+-----------+--------------+-----------+ 
| UNID | name | score  | PRID | 
+-------+-----------+--------------+-----------+ 
| 4 | name_4 |  82  |  2 | 

私が試み次のように、この、その行の「最大」機能を使用して、それは代わりに、私はスコアの正しい(max)の値とともに、そのPRIDを発見最初の行を与える:

+-------+-----------+--------------+-----------+ 
| UNID | name | score  | PRID | 
+-------+-----------+--------------+-----------+ 
| 3 | name_3 |  82  |  2 | 

EDIT:私は自分の要件を誤解しました。最終的な結果は最高のスコアではなく、最高のスコアに対応する "名前"の値を持つ必要がありました。

だから、実際の最終的な結果は次のようになります。

+-------+-----------+--------------+-----------+ 
| PRID | name | fname  | score | 
+-------+-----------+--------------+-----------+ 
| 1 | fname1 | name_1 |  93 | 
| 2 | fname2 | name_4 |  82 | 
| 3 | fname3 | name_6 |  68 | 
+0

この質問はスタックオーバーフローで数百回答えられています。私は最も古く、最も投票率の高い回答の1つを選んで、これを複製としてクローズするように投票しました。あなたが好きではない場合は、私が追加したタグをクリックし、他の多くの答えの1つを見つけてください。 –

+0

@BillKarwinあなたがリンクしている複製はOracle用です。 MySQLでは動作しません。 – Barmar

+0

http://dev.mysql.com/doc/refman/5.7/en/example-maximum-column-group-row.htmlも参照してください。 –

答えて

1
SELECT s.* 
FROM scores s 
WHERE PRID = 2 AND score = (SELECT MAX(score) FROM scores WHERE PRID = 2) 

あなたは、各PRIDのためのすべての最高のスコアを含むレコードを取得したい場合は、あなたが次のことを試すことができます。

SELECT s.* 
FROM scores s 
WHERE score = (SELECT MAX(score) FROM scores s1 WHERE s.PRID = s1.PRID) 
関連する問題