2016-11-29 3 views
0

У меня есть две таблицы, как показано ниже:Прицепные 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?

В качестве примера, для пользователя «fname2» с ИУПОМ 2, я хочу, чтобы вытащить всю эту строку (а не только значения балла) следующим образом:

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

Я попытался это с помощью «макс» функции этой строки, но вместо этого он дает мне первую строку найденной с этим ИУПОМ, наряду с правильным значением (макс) нот следующим образом:

+-------+-----------+--------------+-----------+ 
| 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

Этот на вопрос было ответино сотни раз на переполнение стека. Я выбрал один из самых старых ответов с самым высоким голосом и проголосовал за то, чтобы закрыть это как дубликат. Если вам это не нравится, нажмите тег, который я добавил, и найдите один из многих других ответов. –

+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) 
Смежные вопросы