不知道你的是什麼資料庫,我用oracle的寫法了。兩種辦法:分別求最大和最小,然後unionallselect*from(select *fromtableorderby成績)whererownum<=5unionallselect*from(select *fromtableorderby成績desc)whererownum<=5利用排序,找到每個人的位置,然後輸出。排序的方法很多,可以用rownum排序,也可以用row_number()over()排序我用row_number()over()寫一個select a.姓名,a.成績from(selectrow_number()over(orderby成績)num,姓名,成績fromtable)awherea.num<=5ora.num>=(selectcount(*)-5fromtable)我沒實驗,不過就算有問題也應該不大。sqlserver的版本是啥?是2005以上麼?如果是那麼利用那個row_number的應該也可以,不過為了讓分數一樣的人都出來,那麼最好改為這種情況是假設前五出現分數相同的話,假如前五名有六個人的情況,不過我沒有輸出名次,另外我上面的那種寫法也可以試試,sqlserver好像也可以。不過如果你要是sql2005以前的版本那時sqlserver還沒有這幾個開窗函式,那就稍微有點麻煩了。select 姓名,成績fromselectrank()over(orderby成績)num,rank()over(orderby成績desc)num_desc,姓名,成績fromtable)awherea.num<=5ora.num_desc<=5orderby成績desc
不知道你的是什麼資料庫,我用oracle的寫法了。兩種辦法:分別求最大和最小,然後unionallselect*from(select *fromtableorderby成績)whererownum<=5unionallselect*from(select *fromtableorderby成績desc)whererownum<=5利用排序,找到每個人的位置,然後輸出。排序的方法很多,可以用rownum排序,也可以用row_number()over()排序我用row_number()over()寫一個select a.姓名,a.成績from(selectrow_number()over(orderby成績)num,姓名,成績fromtable)awherea.num<=5ora.num>=(selectcount(*)-5fromtable)我沒實驗,不過就算有問題也應該不大。sqlserver的版本是啥?是2005以上麼?如果是那麼利用那個row_number的應該也可以,不過為了讓分數一樣的人都出來,那麼最好改為這種情況是假設前五出現分數相同的話,假如前五名有六個人的情況,不過我沒有輸出名次,另外我上面的那種寫法也可以試試,sqlserver好像也可以。不過如果你要是sql2005以前的版本那時sqlserver還沒有這幾個開窗函式,那就稍微有點麻煩了。select 姓名,成績fromselectrank()over(orderby成績)num,rank()over(orderby成績desc)num_desc,姓名,成績fromtable)awherea.num<=5ora.num_desc<=5orderby成績desc