name score1 score2 score3
a 70 80 90
b 85 75 95
c 69 74 58
d 54 36 21
如上,學生a,b,c,d分別有3科的成績,現在想查出每個學生的最高分:
name maxscore
a 90
b 95
c 74
d 54
遇到這種列變行的當然就是用union了。。
select name, max(score) as ms from (
select score1 as score, name , 'score1' as course from student
union all
select score2 as score, name , 'score2' as course from student
union all
select score3 as score, name , 'score3' as course from student) t
group by t.name
先是把所有列變成name score的兩列,然後就選最大的。
問題是,如果要把科目也選上,那要怎麼寫。
想了好久沒想到,只能用笨方法:
select t2.name,t2.ms, t3.course from
(select name, max(score) as ms from (
select score1 as score, name , 'score1' as course from student
union all
select score2 as score, name , 'score2' as course from student
union all
select score3 as score, name , 'score3' as course from student) t
group by t.name) t2 left join (
select score1 as score, name , 'score1' as course from student
union all
select score2 as score, name , 'score2' as course from student
union all
select score3 as score, name , 'score3' as course from student) t3
on t2.name = t3.name and t2.ms=t3.score
這樣結果是出來了,但是效率卻不高,而且t和t3的**是一樣的。
a 90 score3
b 95 score3
c 74 score2
d 54 score1
不知道什麼優化的方法?
sql查詢每個班上成績最高的學生資訊
sql查詢每個班上成績最高的學生資訊 資料庫表和資料準備 if exists select from sysobjects where id object id classinfo and objectproperty id,isusertable 1 drop table classinfo cr...
簡單的 學生 各科 成績 展示 sql
最近回憶起以前的一道面試題,是關於學生成績查詢的,應該比較經典,特此貼出來供大家學習。條件 三張表,學生表student,科目表course,成績表results 表結構學生表 create table create table student sid varchar2 10 not null,na...
學生的平均成績
二維陣列練習 學生的平均成績 題目 小甲魚 題目 乙個學習小組有5名成員 每人有3門課的學習成績。將所有資料儲存到二維陣列a 5 3 中,並求這5人的單科平均成績和所有人全科總的平均成績。其中5人成績如下 高等數學 80分 61分 59分 85分 76分 c語言 75分 65分 63分 87分 77...