MySQL:"group by"里面的"order by"

krn*_*krn 9 mysql group-by

我有一个MySQL表names,它由两个字段组成:namerank.该name值不唯一可以有多个匹配.

问题:我想选择分组的记录,name但是如果有多个记录,则应该选择name具有最高记录的记录rank.

一个例子:

汤姆2

本1

本2

SELECT*FROM namesGROUP BY name ORDER BY rankDESC

通常会返回:

汤姆2

本1

我需要:

汤姆2

本2

由于有两个Bens,但第二个具有更高的等级.

似乎,MySQL分组采用了名字而忽略了其余部分.

如何在"分组依据"中订购记录,以便我可以说应该采取哪条记录,如果有多条记录相同name

Pab*_*ruz 9

您需要一个名为的聚合函数max:

select name, max(rank)
  from names
 group by name;
Run Code Online (Sandbox Code Playgroud)

这样,您将检索所有不同的名称,每个名称与其最大等级相关联.

  • 这给出了每个名称都具有最高等级的行,您只想要具有最高等级的名称? (2认同)

Rog*_*sel 5

对我来说,它已经奏效了:

要进入组内的最后一行:

select * from 
( select name, rank from names order by rank desc ) as a 
group by name
Run Code Online (Sandbox Code Playgroud)

  • 我想您没有尝试执行此操作,因为如果您尝试过,那您就会知道它是有效的。不仅在此示例中,您还可以在最大行中获取所有信息。 (3认同)