假设有一个带有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的惯用语言也将不胜感激。
name
后面多了一个逗号。 - vlad