SQL:排序后按列分组

Geo*_*old 3 mysql sql hibernate jpa

给定一个带有namerank列的表结构,有可能存在重复name,我怎样才能获得唯一的行name,最大值rank

例如,假设以下数据:

+-------+-------+
| name  | rank  |
+-------+-------+
| a     | 1     |
| a     | 2     |
| b     | 10    |
| b     | 20    |
| c     | 100   |
| c     | 200   |
+-------+-------+
Run Code Online (Sandbox Code Playgroud)

查询应该返回:

+-------+-------+
| a     | 2     |
| b     | 20    |
| c     | 200   |
+-------+-------+
Run Code Online (Sandbox Code Playgroud)

我有以下解决方案非常慢,我怀疑是O(N ^ 2).

SELECT name, 
       rank 
FROM   books temp1 
WHERE  rank = (SELECT max(rank) 
                      FROM   book temp2 
                      WHERE  temp1.name = temp2.name) 
Run Code Online (Sandbox Code Playgroud)

可以改进吗?有没有更好的方法来做到这一点?

我正在使用MySQL,最终必须将其转换为JPA,所以如果有一个JPA/Hibernate习惯用法也会非常感激.

Joe*_*lli 5

select name, max(rank) as MaxRank
    from books
    group by name
Run Code Online (Sandbox Code Playgroud)