給出stuinfo(學生資訊表)、classinfo(班級資訊表)、exams(考試成績表),統計(筆試成績)成績排名前3的學生!
通過查詢,獲取各個班級(筆試成績)成績排名前3的學生,需要展示學號、姓名、年齡、班級序號、班級名稱、筆試成績等資訊,疊加、依次排序;
我們可以一步一步的實現:
1.學生取得班級資訊
2.獲取有成績的學生相應資訊
3.如何取得排名,就是關鍵了
對於「疊加、依次排序」,我們需要使用到dense_rank()排名函式
先進行排名,獲得所有排名情況
select d1.stuno,d1.stuname,d1.stuage,d1.id,d1.name,e1.wscores,(dense_rank() over(partition by d1.id order by e1.wscores desc)) as ranking from (exams e1 join (select s1.stuno,s1.stuname,s1.stuage,c1.id,c1.name from (stuinfo s1 join classinfo c1 on s1.classid=c1.id)) d1 on e1.stuno=d1.stuno);
此時,通過「ranking」列的排名,可以清楚的知道各個班級的排名總情況!
4.接下來,需要隱藏「ranking」列,同時展現前3排名
如果需要得到前2的排名,只需要將「d2.ranking<=3」中3改為2即可,如下:
具體其他的排名方式統計,後續...
mysql 排序開窗函式 MySQL中實現開窗函式
一 概述 row number是資料庫中常用的乙個開窗函式,可以實現資料分割槽編號的功能,然而mysql並不支援開窗函式。本文介紹了在mysql中實現開窗函式的方法。二 經典開窗函式 首先準備基礎資料,如下入所示。在hive或oracle中使用經典開窗函式實現資料分組編號的方法如下。select n...
MySQL 自定義排序函式
基於拉丁字母的計算機編碼,通用單位元組編碼,1個位元組代表1個字元。主要針對英語和西歐語言。漢子為多位元組資料,ascii是無法編碼中文漢子的。國標編碼,由中國制定編碼字符集,一般用2個位元組代表乙個字元,gb2312對中文進行分割槽分級編碼,共收錄7000多個。為了統一各種語言編碼規則而生,又被稱...
mysql 中的field 排序函式
field 函式 是將查詢的結果集按照指定順序排序。格式 field str,str1,str2,str3,什麼時候用 想讓某幾個特定的字段值放在最後,用field 函式。解釋 str是欄位名字,字串str1,str2,str3等等,是該字段的值。函式意思 匹配到str1,將其放到結果集最後返回。詳...