MySQL:“group by”里面的“order by”

时间:2011-03-19 12:49:28

标签: mysql group-by

我有一个names的MySQL表格,其中包含两个字段:namerankname值不唯一可以有多个匹配。

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

一个例子:

汤姆2

Ben 1

本2

  

SELECT * FROM names GROUP BY name   ORDER BY rank DESC

通常会返回:

汤姆2

Ben 1

我需要:

汤姆2

本2

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

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

如何在“分组依据”中订购记录,以便我可以说明应该采用哪条记录,如果有多条记录具有相同的name

3 个答案:

答案 0 :(得分:8)

您需要一个名为max的{​​{3}}:

select name, max(rank)
  from names
 group by name;

通过这种方式,您将检索所有不同的名称,每个名称与其最大等级相关联。

答案 1 :(得分:5)

对我而言,它已经奏效了:

获取组内的最后一行:

select * from 
( select name, rank from names order by rank desc ) as a 
group by name

答案 2 :(得分:2)

使用max()

select name,
       max(rank)
from names
group by name
order by max(rank) desc