我們平常在用EXCEL時,常常會用加總(MAX)、平均(AVERAGE)等等函數幫助處理數據,
SQL也一樣有很多方便的函數可以使用,
這些對多個值進行計算後,傳回單一值的函式,
我們稱做聚合函式(Aggregate Functions),
最基本的是:
最大值MAX、最小值MIN、平均值AVG、總和SUM、數數COUNT
數數是數(ㄕㄨˇ)數(ㄕㄨˋ)XD
以下會示範這些函數,藉由情境描述,幫助理解這些函數可以派上用場的時機,
同時也搭配其他語法做練習。
使用函式同時也可以選擇其餘欄位名稱,
例如:取出class中費用最高的課程名稱與費用。
但如果取的是平均數,他就會取順位第一的課程名稱,
畢竟課程名稱無法平均......,
所以取平均數、總和這種數值,另外再取其他欄位時,
要注意取出來的東西是否有意義。
SELECT subject,MAX(fee) FROM class;
取最大最小值,不只能夠取數字,
也可以取時間,時間越早就是越小。
例如:取出最早入學的學生。
SELECT subject,MIN(start_date) FROM student;
如果我們想看所有學生的費用總和,
可以透過LEFT JOIN 將student連接class,
再取出費用總和。
SELECT SUM(fee) FROM education.student s LEFT JOIN class c on s.class=c.id ;
COUNT會回傳選擇出的資料 的筆數,
有五筆,就會回傳5。
例如:student表有16筆資料,COUNT舊會回傳16。
SELECT COUNT(*) FROM education.student s ;
現在加入LEFT JOIN和WHERE練習,
例如:上課程費用500的學生有幾人?
SELECT COUNT(*) FROM education.student s LEFT JOIN class c on s.class=c.id WHERE fee=500;
平均值會把選出來的資料平均,
例如:大家的平均學費。
SELECT AVG(fee) FROM test.student s LEFT JOIN class c on s.class=c.id ;
MAX和MIN這兩個例子的實作,要修改一下
MAX例子寫到:取出class中費用最高的課程名稱與費用的部分
但如果是
SELECT subject,MAX(fee) FROM class;
只會顯示subject的第一行值和最大的fee值,如果要符合例子取出費用最高的課程和費用部分,要改成下方這樣
SELECT subject, fee FROM class WHERE fee = (SELECT MAX(fee) FROM class);
MIN例子寫到:取出最早入學的學生
但如果是
SELECT subject,MIN(start_date) FROM student;
顯示的是subject的第一行值和最早的進入時間,並沒有顯示最早入學的學生,如果要符合例子的做法,要改成下方這樣
SELECT full_name, start_date FROM student WHERE start_date = (SELECT MIN(start_date) FROM student);