現在有乙個表:成績表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...