鉴于包含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习惯用法,也会非常感激。
答案 0 :(得分:5)
select name, max(rank) as MaxRank
from books
group by name
答案 1 :(得分:1)
SELECT name
, MAX(rank) AS rank
FROM books
GROUP BY name
这是在示例中返回结果集的最简单的查询。
答案 2 :(得分:1)
通常情况下,您需要的是
标准组SELECT name,
max(rank) as rank
FROM books temp1
GROUP BY name
但由于它是MySQL,还有另一种选择
SELECT name,
rank
FROM (
SELECT name, rank
FROM books
ORDER BY name, rank desc) ordered
GROUP BY name