【总结】mysql 如何实现先排序后分组
发表于2014-10-21 16:55 | 次阅读 | 0条评论 | 作者:siru90
mysql如果在一条sql语句里面同时用到group by 和order by的话,group by要写在 order by的前面,如果需要在group by之前先排序,你把order by 写前面的话,会报错,无法执行。
今天在做项目的时候刚好碰到这个问题,查了些资料都没有什么好的解决方法,正打算放弃,用程序处理算了,后来想如果这样操作,日后数据多了,处理肯定很慢,因为我的sql是一个表的自连接,而且记录也很多,重复值也很多,下面是我的sql:
select * from tbUser a left join tbUser b on a.iGameId = b.iGameId
where a.sRtx='123'
group by a.iId
这样查询出来的数据,默认是group by的第一条记录,相同的iID的记录不会先进行排序再group by
本着再试试看,最终还是找到了解决方法,可以
实现先排序 再分组。
1、可以先把数据按照你的条件要求,使用order by排好序
2、在查询sql外面,再包一层查询,使用group by
例如: select * from (select * from t where 你的查询条件 order by 你的排序字段) group by 你的分组字段
下面贴出我写的sql,仅供参考:
select * from
(select a.iId, a.iGameId, a.sRole, a.iEnable, b.sRtx, b.iEnable exaEnable from tbUser a left join tbUser b on a.iGameId = b.iGameId where a.sRtx='v_rgzhou' order by b.iEnable desc, b.sRole)
as t group by iId;