全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2642
推到 Plurk!
推到 Facebook!

如何用Group By,Select出各群組的Top 50 Percent

答題得分者是:cashxin2002
tomking
一般會員


發表:9
回覆:7
積分:3
註冊:2003-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-04 15:21:34 IP:61.221.xxx.xxx 未訂閱
如題! 如何用一個SQL敘述Select出各群組的Top 50 Percent 若用以下敘述: Select A.Sub_No,Avg(A.Score) From(Select Top 50 Percent Sub_No,Score From Student Order By Sub_No,Score DESC) A Group By A.Sub_No 會篩選出整體Score(分數)的Top 50 Percent 的平均分數 而不是各Sub_No(科目) Score的Top 50 Percent 的平均分數 請各位大大幫幫我 謝謝! 發表人 - tomking 於 2003/09/05 08:47:14
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-04 15:47:49 IP:61.155.xxx.xxx 未訂閱
Select Top 50 * form (select Percent,Score From Student Group By Sub_No Order By Score DESC)
tomking
一般會員


發表:9
回覆:7
積分:3
註冊:2003-03-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-04 16:26:02 IP:61.221.xxx.xxx 未訂閱
sos_admin大大 我想你誤會我的意思了 我要篩選的是各個科目分數的前百分之五十
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-04 16:38:59 IP:61.155.xxx.xxx 未訂閱
tomking 兄: 不太懂你说问的什么意思! >>
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-04 23:14:27 IP:63.84.xxx.xxx 未訂閱
您好!    小弟在看您的問題時, 發現有一個另類的問題: 您的Student資料表中, Sub_No(科目)欄位的值應該會有重复吧, 所以您才使用Group By方法加以群組, 那如果是建立群組的話, SQL語句前半段的Select Top 50 Percent Score就會有問題喔, 因為SQL語句從后面的Sub_No的群組來抓前面的Score值, 會出現不知該取何值的現象喔. 您的問題似乎有些混淆, 描述得清楚一些好嗎? 小弟淺見, 誠懇指正! 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
tomking
一般會員


發表:9
回覆:7
積分:3
註冊:2003-03-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-05 08:51:21 IP:61.221.xxx.xxx 未訂閱
對不起! 小弟修正了問題 不知各位大大是否有比較了解小弟的問題
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-05 11:38:30 IP:63.84.xxx.xxx 未訂閱
引言: sos_admin大大 我想你誤會我的意思了 我要篩選的是各個科目分數的前百分之五十
您好﹗ 您所說的前百分之五十指的是什么﹖ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
tomking
一般會員


發表:9
回覆:7
積分:3
註冊:2003-03-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-05 13:39:10 IP:61.221.xxx.xxx 未訂閱
我指的前百分之五十是指分數比較高的前百分之五十
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-05 15:36:25 IP:63.84.xxx.xxx 未訂閱
您好﹗    你的需要是篩選出每個科目中分數排名前50%(也就是前面一半)的平均分數嗎﹖ 如果排名在前50%條件不考慮的話﹐您所寫的就可以﹕ Select A.Sub_No,Avg(A.Score) From(Select Top 50 Percent Sub_No,Score From Student Order By Sub_No,Score DESC) A Group By A.Sub_No    但如果要考慮上排名在前50%﹐單個科目分別做篩選﹐也是可以﹐只需要加上Where條件式﹕ Select A.Sub_No,Avg(A.Score) From(Select Top 50 Percent Sub_No,Score From Student Where Sub_No='XXX' Order By Sub_No,Score DESC) A Group By A.Sub_No 但如果需要各個學科一起做篩選的話﹐可能比較困難﹐因為無論是使用In或者是Between...end等方法﹐就變成只篩選Top 50了﹐而丟失了Top 50 Percent的作用﹐所以要看是否有變通的方法逐個的進行篩選﹒ 小弟淺見﹐僅供參考﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
系統時間:2024-07-01 20:29:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!