2016年9月12日 星期一

SQL語法-取得分組資料最大值的那筆資料

一般要做分組查詢時只取分組的欄位和某欄位的最大值或最小值等。
案例:學生考試三次的資料表,每次皆考三種科目
需求:有哪些學生參與過考試和三次考試中數學最高的成績
e.g. select tableA_id,MAX(tableA_math) from tableA group by tableA_id

但如果想要取得每個學生數學最高的成績以及該次考試其他科目成績時該怎麼處理?!
依最直覺的想法會這樣下
e.g select  tableA_id,MAX(tableA_math),tableA_art,tableA_pe from tableA group by tableA_id

會發現這樣的下法取得的tableA_art跟tableA_pe 並不是MAX(tableA_math)該筆資料中的資料。
因為上述的執行概念是這樣:
1.取得tableA資料
2.分組tableA_id<-此時會根據目前的排序取得該分組第一筆資料
3.在取得tableA_math的最大值

取得解法前,先分解需求:
1.資料表中學生的資料有重複
2.條件是取得各個學生數學最高成績的那次考試成績
因此...