说,我有一张桌子:
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)
但它没有做到这一点((
答案 0 :(得分:2)
首先,您必须使用按查询分组查找每个ext_id的最大param
。然后,您必须再次在t上加入此查询的结果,其中ext_id
匹配,param
为max_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
。