select * from ( select t.*,rank() over(partition by a,b,c order by col_num) rk from t) tb where tb.rk<=3;
如果Oracle数据库的版本是817及以上. 可以使用分析函数来处理,如果版本较低,好像处理起来就比较麻烦了. select * from ( select t.*,rank() over(partition by a,b,c order by col_num) rk from t) tb where tb.rk<=3;这条语句只能保证取出排名欠3名的用户, 如果有很多人并列前几名,这条语句就^_^如果确定只要前3挑记录, 可以考虑使用row_number 代替 rank来实现, 具体例子我就不举了.
select a.* from ( select b.*,rank() over (partition a,b,c order by colname) rk from tab) where rk<4;
select t.*,rank() over(partition by a,b,c order by col_num) rk from t) tb
where tb.rk<=3;
可以使用分析函数来处理,如果版本较低,好像处理起来就比较麻烦了.
select * from (
select t.*,rank() over(partition by a,b,c order by col_num) rk from t) tb
where tb.rk<=3;这条语句只能保证取出排名欠3名的用户, 如果有很多人并列前几名,这条语句就^_^如果确定只要前3挑记录, 可以考虑使用row_number 代替 rank来实现, 具体例子我就不举了.
select b.*,rank() over (partition a,b,c order by colname) rk from tab)
where rk<4;