正常的mysql关键字的
书写顺序:
select -> from -> where -> group by -> having -> order by
执行顺序:
FROM - ON -JOIN - WHERE - SELECT - GROUP BY - HAVING - ORDER BY
- HAVING 是用来过滤分组后的结果,可以使用聚合函数
- where 不可以使用聚合函数
从上面我们可以看到,是分组在排序的;
##先排序在分组,那如何实现了?
方法一:无用的
先按照排名排序,然后在按照组合id分组
select * from ( select * from table order by rank ) group by cpId
但是这种方法会有问题,我最开始以为分组是显示第一条数据,但是好像并不是这样的
方法二:
先得到rank排名最小的数据,然后在关联一次表得到完整数据
这样可以排名最前的数据
select a.* from cp_rank a
right join(
select min(rank) rank,cp_group_id from cp_rank GROUP BY cp_group_id
) r on a.cp_group_id=r.cp_group_id and a.rank=r.rank