1

说,我有一张桌子:

id ext_id param

1    5      0

2    5      1

3    6      0

4    6      0

5    7      1

6    7      1

分别。

我想要这样的结果:

2 5 1

3 6 0

5 7 1

这样 MySQL 按 ext_id 分组并显示一个具有最大值的元素param。如果所有人都是平等的 - 我需要任何。

我试过类似的东西:

SELECT * FROM t 
GROUP BY ext_id HAVING param = MAX(param)

但它没有成功((

4

1 回答 1

2

首先,您必须param使用 group by 查询找到每个 ext_id 的最大值。然后你必须在 t 上再次加入这个查询的结果,其中ext_id匹配,并且parammax_param

SELECT t2.*
FROM (
  SELECT ext_id, max(param) as max_param
  FROM t
  GROUP BY ext_id ) t1 inner join t t2
  on t1.ext_id=t2.ext_id and t1.max_param=t2.param
GROUP BY t2.ext_id

由于可能有不止一行具有相同的最大值param,所以我再次分组ext_id,MySql 允许您这样做,因此每个ext_id.

于 2012-12-19T18:54:07.450 回答