oracle的row_number()over 、rank()over和dense_rank()over這三種分析函數(轉)

來源:互聯網
上載者:User

標籤:nbsp   查詢   rank   技術分享   根據   圖片   oracl   des   sele   

假設現在有一張學生表student,學生表中有姓名、分數、課程編號,現在我需要按照課程對學生的成績進行排序。

select * from student

1. rank over ()可以實現對學生排名,特點是成績相同的兩名是並列,如下1 2 2 4 5

select name,
       course,
       rank() over(partition by course order by score desc) as rank
  from student;

2. dense_rank()和rank over()很像,但學產生績並列後並不會空出並列所佔的名次,如下1 2 2 3 4

select name,
       course,
       dense_rank() over(partition by course order by score desc) as rank
  from student;

3. row_number這個函數不需要考慮是否並列,那怕根據條件查詢出來的數值相同也會進行連續排名

select name,
       course,
       row_number() over(partition by course order by score desc) as rank
  from student;

 

答疑:

1. partition by用於給結果集進行分區。

2. partition by和group by有何區別?

partition by只是將未經處理資料進行名次排列(記錄數不變)

group by是對未經處理資料進行彙總統計(記錄數可能變少, 每組返回一條)

3. 使用rank over()的時候,空值是最大的,如果排序欄位為null, 可能造成null欄位排在最前面,影響排序結果。

可以這樣: rank over(partition by course order by score desc nulls last)

oracle的row_number()over 、rank()over和dense_rank()over這三種分析函數(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.