假设有一个表如下
0512 23
025 69
025 198
025 67
025 13
0519 1
0512 1
0515 1
0518 8
0518 2
0512 1
025 30
025 1
0512 1
0527 1
0510 1
0513 1
0513 1
025 1
0513 1
0513 1
025 226
0512 7
0512 1
0512 29
025 10
0519 1
0512 3
0512 2
0514 1
0517 4
0510 1
0510 4
025 10
025 3
0512 1
0510 1
0514 1
0513 4
025 3
0511 1
0523 4
0512 22
025 56
025 6
025 6
025 101
0515 3
0519 1
0516 2
0512 2
0514 1
0518 23
0519 3
025 6
025 5
025 7
0512 1
0513 20
0513 64
0513 7
0527 2
0514 1
0511 1
0510 1
025 3
025 1
025 2
0527 1
0513 1
0512 21
025 89
025 75
025 4
0515 8
0514 19
0514 1
0518 1
0518 6
0518 2
025 2
0511 3
0511 6
0510 1
0511 1
0511 1
0513 4
0513 1
025 1
0513 1
0511 1
0523 2
0512 2
025 171
025 10
025 22
025 4
0516 2
0516 4
0517 1
0519 2
0512 2
0514 8
0514 1
0514 1
0518 2
0510 34
025 5
0511 9
0511 1
0511 8
0511 2
0511 1
0513 1
025 4
025 86
025 55
025 15
025 1
0512 38
0519 2
0519 5
0512 3
0514 2
0518 3
0512 2
025 5
025 1
0513 11
0510 3
025 7
025 1
0513 1
0513 1
0518 2
0512 11
0512 1
0512 1
025 28
025 12
025 19
0512 2
0512 3
0517 7
0512 1
0512 1
0515 5
0518 10
0510 52
025 1
0513 27
0513 47
0511 3
0518 1
0513 1
0518 1
0512 1
0512 7
025 16
025 51
025 48
025 5
0515 19
025 19第一列是各地的区号,第二列是数量,现在要求取每个地区数量的前五名
请问怎么写啊

解决方案 »

  1.   

    row_number() over(partition by ... order by..)
      

  2.   

    select areaId,count
    from
    (
    select areaId,count,row_number()over(partition by areaId order by count desc) row_num
    )t
    where row_num <=5;
      

  3.   

    --分析函数可以
    select 区号,数量
    from (select 区号,数量,row_number() over(partition by 区号 order by 数量) rn
    from tb)
    where rn<=5
      

  4.   

    select 区号,rank() over(partition by 区号 order by 数量) rn
    from tb where rn<=5
      

  5.   

    非常感谢大家,4楼5楼的兄弟少了个desc,呵呵