Mysql SQL:排序后按列分组
给定一个包含Mysql SQL:排序后按列分组,mysql,sql,hibernate,jpa,Mysql,Sql,Hibernate,Jpa,给定一个包含名称和秩列的表结构,如果名称可能存在重复项,我如何通过名称以最大秩获得唯一的行 例如,假设以下数据: +-------+-------+ | name | rank | +-------+-------+ | a | 1 | | a | 2 | | b | 10 | | b | 20 | | c | 100 | | c | 200 | +-------+-------+ 查询应返回: +----
名称
和秩
列的表结构,如果名称
可能存在重复项,我如何通过名称
以最大秩
获得唯一的行
例如,假设以下数据:
+-------+-------+
| name | rank |
+-------+-------+
| a | 1 |
| a | 2 |
| b | 10 |
| b | 20 |
| c | 100 |
| c | 200 |
+-------+-------+
查询应返回:
+-------+-------+
| a | 2 |
| b | 20 |
| c | 200 |
+-------+-------+
我有一个非常慢的解决方案,我怀疑是O(N^2)
可以改进吗?有没有更好的办法
我使用的是MySQL,这最终必须翻译成JPA,所以如果有JPA/Hibernate的习惯用法,我也会非常感激
select name, max(rank) as MaxRank
from books
group by name
在您的示例中,这是返回结果集的最简单查询。通常您只需要一个标准的group by
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
name
SELECT name,
max(rank) as rank
FROM books temp1
GROUP BY name
SELECT name,
rank
FROM (
SELECT name, rank
FROM books
ORDER BY name, rank desc) ordered
GROUP BY name