在GROUP中按条件显示元素

时间:2012-12-19 18:49:08

标签: mysql select group-by conditional-statements

说,我有一张桌子:

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)

但它没有做到这一点((

1 个答案:

答案 0 :(得分:2)

首先,您必须使用按查询分组查找每个ext_id的最大param。然后,您必须再次在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