Учитывая структуру таблицы со столбцами name
и rank
, с возможностью дублирования для name
, как я могу получить уникальные строки на name
, с максимальным rank
?
Например, предполагая следующие данные:
+-------+-------+
| name | rank |
+-------+-------+
| a | 1 |
| a | 2 |
| b | 10 |
| b | 20 |
| c | 100 |
| c | 200 |
+-------+-------+
Запрос должен вернуть:
+-------+-------+
| a | 2 |
| b | 20 |
| c | 200 |
+-------+-------+
У меня есть следующее решение, которое является чрезвычайно медленным, и я подозреваю, что O ((N ^ 2).
SELECT name,
rank
FROM books temp1
WHERE rank = (SELECT max(rank)
FROM book temp2
WHERE temp1.name = temp2.name)
Можно ли это улучшить?Есть ли вообще лучший способ сделать это?
Я использую MySQL, и это в конечном итоге придется преобразовать в JPA, поэтому, если для этого есть идиома JPA / Hibernate, это также будет очень полезно.