在MYSQL中查找最大值但是如果最大值位于两行中会怎样

时间:2014-08-14 02:23:09

标签: mysql sql

我试图获得下表中每个id的最大区域:

id      name      area
1001    Land AA   0.55
1001    Land AB   0.55
1001    Land AC   0.25
1001    Land AD   0.1
1002    Land BA   1
1002    Land BB   0.8
1002    Land BC   0.4
1003    Land CA   0.65
1003    Land CB   0.22
1003    Land CC   0.22

但是,如果数据包含具有两个或更多最大值的值,该怎么办?例如,1001有2行具有其最大值。当我使用此查询时: SELECT id,name,max(area)FROM land GROUP BY id

id      name      max(area)
1001    Land AA   0.55
1002    Land BA   1
1003    Land CA   0.65

期望的结果:

id      name      area
1001    Land AA   0.55
1001    Land AB   0.55
1002    Land BA   1
1003    Land CA   0.65

提前致谢。请告诉我,如果这个问题有重复,我无法搜索,因为我不知道如何用文字解释或使用什么搜索查询。再次感谢。

1 个答案:

答案 0 :(得分:0)

您需要使用join或其他条件执行此操作。这是一种典型的方法:

select l.*
from land l join
     (select id, max(area) as maxarea
      from land l
      group by id
     ) lid
     on l.id = lid.id and l.area = lid.maxarea;

另一种有时更有效的方法是使用not exists

select l.*
from land l
where not exists (select 1 from land l2 where l2.id = l.id and l2.area > l.area);

也就是说,从land获取所有行,其中没有相应的行具有相同的id和更大的area

最后,您的查询:

SELECT id, name, max(area)
FROM land
GROUP BY id;

不按照您的想法行事。 name不是来自最大id的行。它来自每个id的任意(技术上“不确定”)行。这使用了group by扩展名,其中记录了here。在其他数据库中,这将生成语法错误。我建议你避免使用这个扩展,直到你明白它真正在做什么。也就是说,确保聚合查询中未使用聚合函数的所有列也在group by中(在您的查询中,name不在group by)。