SQL成績統計分析 排名問題

2021-08-10 20:27:11 字數 1970 閱讀 1646

select *

from studentscore

select row_number() over (order by studentscore desc,id desc) number,*

from studentscore

下面介紹下在sql成績統計分析中遇到的一些小問題,首先介紹下成績分析中經常遇到的問題 就是排名問題,這裡就不得不提到sql中的row_number(),rank(),dense_rank(),ntile()這四個好兄弟了,下面一一揭開它們神秘的面紗:

首先create乙個學生成績表(studentscore) 不多做介紹了如下

定義:row_number()函式作用就是將select查詢到的資料進行排序,每一條資料加乙個序號,他不能用做於學生成績的排名,一般多用於分頁查詢, 

比如查詢前10個 查詢10-100個學生。

例項:1.1對學生成績排序

這裡number就是每個學生的序號 根據studentscore(分數)進行desc倒序

1.2獲取第二個同學的成績資訊

這裡用到的思想就是 分頁查詢的思想 在原sql外再套一層select 

where t.number>=1 and t.number<=10 是不是就是獲取前十個學生的成績資訊納。

2.rank()

定義:rank()函式,顧名思義排名函式,可以對某乙個字段進行排名,這裡為什麼和row_number()不一樣那,row_number()是排序,當存在相同成績的學生時,row_number()會依次進行排序,他們序號不相同,而rank()則不一樣出現相同的,他們的排名是一樣的。下面看例子:

2.1對學生成績進行排名

這裡發現 row_number()和rank()怎麼一樣?因為學生成績都不一樣所以排名和排序一樣,下面改一下就會發現區別。

當出現兩個學生成績相同是裡面出現變化。rank()是 1 2 2,而row_number()則還是1 2 3,這就是rank()和row_number()的區別了

3.dense_rank()

定義:dense_rank()函式也是排名函式,和rank()功能相似,也是對字段進行排名,那它和rank()到底有什麼不同那?看例子:

例項:

dense_rank()密集的排名他和rank()區別在於,排名的連續性,dense_rank()排名是連續的,rank()是跳躍的排名,所以一般情況下用的排名函式就是rank()。

4.ntile()

定義:ntile()函式是將有序分割槽中的行分發到指定數目的組中,各個組有編號,編號從1開始,就像我們說的』分割槽』一樣 ,分為幾個區,乙個區會有多少個。

例項: 

這裡查詢了3次,第一次分為1個』區』 ,所以查詢結果number全是1,第二次分為2個區,查詢結果為 1 1 2,意思就是 第乙個 『區』 為 1 1 兩個編號的資料 ,第二個』區』只有2這個資料。

到這裡,sql的排名問題就說完了,下次介紹一些深層的sql排名語句。

成績統計分析系統規劃

學科表 學科id,名稱,序號,總分,優秀線,及格線,低分線,是否綜合學科,子學科列表 學生表 學生id,學校,年級,班級,學號,姓名 考試表 考試id,學年,學期,考試名稱 考生表 考生id,考試id,學校,年級,班級,學生id,姓名 考試學科 考試學科id,考試id,學科id,序號,總分,優秀線,...

統計分析的體會

客戶給了一張基本的資料表,然後讓我做大量的計算,並且動態 靜態的做統計分析報表,經過了長達兩個月的苦戰,終於作完了。體會如下 1 一張存放中間統計結果的表是必要的,如果能夠將客戶的統計分析需要經過計算才能顯示的字段囊括在內是最好不過了,畢竟在查詢的過程中作計算是一件很討厭的事,雖然有資料冗餘,但是簡...

資料的統計分析

資料預處理之後,我們要做一些統計分析,來觀察我們的資料,這其中包括 描述性分析 統計推斷。描述性分析 主要是統計指標 圖表。1 集中趨勢分析 除了分位數,我們還可以結合 中位數 眾數 平均數三者的關係。具體地 眾數在中位數左側,平均數在中位數右側,則此時資料呈正偏態分布,又叫右偏,存在極大異常值。是...