3 取出每個班級分數排在前兩位的學生

2022-07-15 07:24:10 字數 1493 閱讀 9284

現在有乙個表:成績表grade,有四個班級的學生,現在問題是:取出每個班級分數為前兩名的 學生資訊。

這個問題的解決辦法有很多,在此刻我的方法是,

select sname, class, score from grade where (

select count(*) from grade as f wheref.class=grade.class and f.score>=grade.score

) <= 2;

說明:乙個外表grade 乙個內錶f, grade每查詢一條資料 a 時,f表都會查詢整個表中 與 資料 a的class相等,且score>=a.score ,且滿足這兩個條件的個數<=2,

滿足了這三個條件說明 這條資料就是某個班級裡面 分數在前兩位的學生了。

查詢的結果: 

這個結果, 達到了我們的目的。

比方說:還是上面的表 grade , 現在想查詢 每個班級分數倒數兩位的同學 

sql: 

select sname, class, score from grade where (

select count(*) from grade as f where f.class=grade.class and f.score<=grade.score

) <=2;

就是第二個分數比較的條件改變了,思路一樣。

比方說:還是上面的表 grade , 現在想查詢 每個班級分數倒數第一的同學

sql:

select sname, class, score from grade where (

select count(*) from grade as f where f.class=grade.class and f.score<=grade.score

) =1;

回到上面的話題,假如說我要查詢grade表中 每個班級分數排名前兩位的學生,並每個班級學生分數從大到小排列

(你會發現前面查詢到的結果,每個班級的學生都沒按分數大小排序的哦),那怎樣讓查詢到的結果,每個班級裡面的學生按分數從大到小排序呢?

解決辦法分兩步: 1.首先將grade表按班級分組,每組按公升序排列: select * from grade order by class asc, score desc

2.在步驟1的查詢結果基礎上,查詢每個班級前兩名的學生。

最終的sql就是這樣:

1

select sname, class, score from

(select * from grade order by class, score desc ) grade where( 2

select

count(*) from grade as f where f.class = grade.class and f.score>=

grade.score

3 )<=

2;

結果:

結果我們可以看到,每個班級裡面的分數最大的兩個學生也是按分數從大到小排列的,這就達到了我們的目的了。

mysql取出每個分組中最新的記錄

mysql取出每個分組中最新的記錄 mysql的gruop by分組功能沒有排序功能,所以我們如果想取出某個分組下的最新記錄是不太容易的,下面介紹兩種方法,一種是通過子查詢,一種是通過group concat函式來實現。一 表結構及資料插入 表的結構 test3 create table if no...

2354 分班級 二分

題目描述 zoro是乙個有強迫症的人,他喜歡均衡。17級的新生要開學了,起初所有班級是按照學生的 地分的,各班人數非常不合理。於是老師要求zoro來讓各班人數均衡一下。由於學校系統陳舊,每次調換只能是zoro自己手動的把乙個學生從乙個班級拉到另外乙個班級,由於zoro有強迫症,他每次會找出班級人數最...

輸入班級人數,錄入每個同學的成績並求平均值

在vb中我們可能通過迴圈,甚至新增幾個控制項來實現這個功能,在現學的c 中用的 思路很簡單,邏輯感覺還是有點不好理解,畢竟剛接觸c 現在再看vb覺得 很直白,可能是用的時間比較長的緣故吧,就是和說話差不多。相比之下感覺實現題目功能還是c 比較少。ok,看 和注釋 static void main s...