iT邦幫忙

0

請問SQL 該如何查詢每個學生的最高成績呢? (ORACLE)

sql
westv 2010-01-25 14:52:3113377 瀏覽

甲學生 乙學生..........
成績A 80 70...........
成績B 75 65...........
成績C 60 50...........

查詢結果 甲學生 80分
乙學生 70分

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
12
iepart
iT邦新手 3 級 ‧ 2010-01-26 10:19:53
最佳解答

前言:我猜這可能是某科目考了好幾次的小考,老師想取最高的成績當作是該學生的成績。
我的參考答案如下(我用的是MS-SQL的語法,和Oracle語法應該是類似)

<pre class="c" name="code">
select '甲學生' student, max(甲學生) score from #score
union all
select '乙學生' student, max(乙學生) score from #score
union all
select '丙學生' student, max(丙學生) score from #score

查詢結果如下:

<pre class="c" name="code">
甲學生	80
乙學生	70
丙學生	40

以下方便實際測試產生資料用的SQL,也提供出來參考

<pre class="c" name="code">
--產生原始成績表
create table #score
(
	甲學生 int
	,乙學生 int
	,丙學生 int
)

--產生成績資料
insert into #score select 80,70,40
insert into #score select 75,65,35
insert into #score select 60,50,20

※若Table Schema開成這樣的話,就可以用二行SQL完成了

<pre class="c" name="code">
--查詢學生最高成績
select 學生姓名, max(成績) 成績 from #score
group by 學生姓名


--產生原始成績表
create table #score
(
	學生姓名 nvarchar(20)
	,次數 int
	,成績 int
)

--產生成績資料
insert into #score select '學生甲',1,80
insert into #score select '學生甲',2,75
insert into #score select '學生甲',3,60
insert into #score select '學生乙',1,70
insert into #score select '學生乙',2,65
insert into #score select '學生乙',3,50
insert into #score select '學生丙',1,40
insert into #score select '學生丙',2,35
insert into #score select '學生丙',3,20
10
Albert
iT邦高手 1 級 ‧ 2010-01-25 21:25:01

westv提到:
甲學生 乙學生..........
成績A 80 70...........
成績B 75 65...........
成績C 60 50...........

誰教你亂開 Table Schema..

依該是 ::

westv提到:
成績A 成績B 成績C..........
甲學生 80 70...........
乙學生 75 65...........
丙學生 60 50...........

外獅佬 iT邦大師 1 級 ‧ 2010-01-26 09:06:32 檢舉

成績A 成績B 成績C..........
甲學生 80 70...........
乙學生 75 65...........
丙學生 60 50...........

為什麼一定是這樣??
用學生當做欄位,可以儲存不定筆數的成績資料,應該也沒問題吧

Albert iT邦高手 1 級 ‧ 2010-01-26 12:31:24 檢舉

基本原則是 ::
Record 與 Field 的比對
上千上萬 Record (學生) 不會拿來當 Field 處理
但是凡是總有例外!!!

8
lcjan
iT邦研究生 4 級 ‧ 2010-01-25 22:14:24

假設:

  1. 你的Table Name 叫做『成績TABLE』,Field Name分別為『學生甲』『學生乙』...
  2. Table資料量不大(幾千筆以下),如果資料太多,又沒Index的話會很慢。

SQL:
Select Max(學生甲) from
(
Select 學生甲 From 成績Table
)

我要發表回答

立即登入回答