Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL:排序后按列分组_Mysql_Sql_Hibernate_Jpa - Fatal编程技术网

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