废话不多说:
表一:team
表二:new_info
求:不同分组后最大浏览量的第一名(排除相同分组,pageviews相同);
select a.* from new_info a right join
( select max(pageviews) as cpageviews ,team_id from new_info group by team_id) b
on a.pageviews=b.cpageviews and b.team_id=a.team_id
结果:
求:不同分组后最大浏览量的前两名(排除相同分组,pageviews相同条数不能超过3条);
select * from new_info a where (
select count(*) from new_info b where b.team_id=a.team_id and b.pageviews>=a.pageviews
)<=2 order by a.team_id,a.pageviews desc
内部逻辑解析:
首选 求前两名的数据 可以转化成 -----> 当前数据在对应的分组中是否有小于的数据总条数,根据条数判断名次;
b.pageviews>=a.pageviews既 [122,144,66] >= 122 比较 返回的count 为 2,第二名;
b.pageviews>=a.pageviews既 [122,144,66] >= 144 返回的count 为 1,第一名;
b.pageviews>=a.pageviews既 [122,144,66] >= 66 返回的count 为 3,第三名;
所以count <=2 满足的 122,144;