sqlserver中分區函數 partition by的用法

需求場景:html

 

表結構及數據:sql

 

查詢效果:數據庫

 

思路:函數

 

sql語句:htm

 

查詢結果:blog

 

=========================感謝下面這些博主的博客=============================排序

轉自:http://www.cnblogs.com/zhangchengye/p/5473860.html#4017927get

partition  by關鍵字是分析性函數的一部分,它和聚合函數(如group by)不一樣的地方在於它能返回一個分組中的多條記錄,而聚合函數通常只有一條反映統計值的記錄,博客

partition  by用於給結果集分組,若是沒有指定那麼它把整個結果集做爲一個分組。數學

partition by 與group by不一樣之處在於前者返回的是分組裏的每一條數據,而且能夠對分組數據進行排序操做。後者只能返回聚合以後的組的數據統計值的記錄。

 

Demo 

數據庫表結構 學生成績表 UserGrade

Id        int              Checked     主鍵Id
Name   varchar(50) Checked     學生名
Course varchar(50) Checked     課程名
Score   int             Checked      分數

0一、把每一個人學生的成績按照升序排名 (思路:根據學生姓名分組 根據每一個人成績排序)

sql語句 

select *,ROW_NUMBER() over( partition by Name order by Score )排名
from UserGrade

查詢結果

Id Name Course Score 排名
1004 李四 數學 60 1
1005 李四 語文 80 2
1001 李四 英語 100 3
1007 王五 數學 30 1
1006 王五 語文 50 2
1003 王五 英語 50 3
1008 張三 英語 60 1
1000 張三 語文 80 2
1002 張三 數學 90 3

 

0二、把每一個學科的成績分別進行排名 (思路:根據學科分組 根據成績排序)

sql語句 

select *,ROW_NUMBER() over( partition by Course order by Score )排名
from UserGrade

查詢結果

Id Name Course Score 排名1002 張三 數學 90 11004 李四 數學 60 21007 王五 數學 30 31001 李四 英語 100 11008 張三 英語 60 21003 王五 英語 50 31000 張三 語文 80 11005 李四 語文 80 21006 王五 語文 50 3

相關文章
相關標籤/搜索