select id name gradename gradeid brownum age from user
得到的结果是
id name gradename gradeid brownum age
1  张三 一年级 1 11 7
8  张四 二年级 2 16 8
2  张五 二年级 2 17 7
4  张六 四年级 4 16 9
6  张七 三年级 3 18 7
5  张八 二年级 2 19 9
3  张九 四年级 4 21 10
7  张十 一年级 1 41 7
9  李一 一年级 1 71 7
10 李二 三年级 3 99 7
11 李四 四年级 4 88 10我想要的结果是 根据年级和点击率排序 只要每个学年的前两名brow最高 结果是
9  李一 一年级 1 71 7
7  张十 一年级 1 41 7
5  张八 二年级 1 19 9
2  张五 二年级 2 17 7
10 李二 三年级 3 99 7
6  张七 三年级 3 18 7
11 李四 四年级 4 88 10
3  张九 四年级 4 21 10
请大神指点

解决方案 »

  1.   


    select *
      from( select row_number()over(partition by gradeid order by brow desc) row_,
                   t.*
              from user
          )
     where row_ <= 2;
      

  2.   

    select id, name, gradename, gradeid, brownum, age from( 
      select id, name, gradename, gradeid, brownum, age,
        row_number() over (partition by gradeid order by brownum desc) rn from user)
    where rn <= 2;
      

  3.   

    where rn <= 2; 为什么我找不到rn呢
      

  4.   

    给 user 写个别名T 呗