【发布时间】:2011-07-04 15:33:25
【问题描述】:
给定一个包含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 习惯用法也将不胜感激。
【问题讨论】: