iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 22

第二十二日-MYSQL聚合函數:MAX、MIN、AVG、SUM、COUNT

  • 分享至 

  • xImage
  •  

我們平常在用EXCEL時,常常會用加總(MAX)、平均(AVERAGE)等等函數幫助處理數據,
SQL也一樣有很多方便的函數可以使用,
這些對多個值進行計算後,傳回單一值的函式,
我們稱做聚合函式(Aggregate Functions)
最基本的是:

最大值MAX、最小值MIN、平均值AVG、總和SUM、數數COUNT

數數是數(ㄕㄨˇ)數(ㄕㄨˋ)XD

以下會示範這些函數,藉由情境描述,幫助理解這些函數可以派上用場的時機,
同時也搭配其他語法做練習。

  • 最大值MAX

使用函式同時也可以選擇其餘欄位名稱,
例如:取出class中費用最高的課程名稱與費用。

但如果取的是平均數,他就會取順位第一的課程名稱,
畢竟課程名稱無法平均......,
所以取平均數、總和這種數值,另外再取其他欄位時,
要注意取出來的東西是否有意義。

SELECT subject,MAX(fee) FROM class;
  • 最小值MIN

取最大最小值,不只能夠取數字,
也可以取時間,時間越早就是越小。
例如:取出最早入學的學生。

SELECT subject,MIN(start_date) FROM student;
  • 總和SUM

如果我們想看所有學生的費用總和,
可以透過LEFT JOIN 將student連接class,
再取出費用總和。

SELECT SUM(fee) FROM education.student s LEFT JOIN class c on s.class=c.id ;
  • 數數COUNT

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;
  • 平均值AVG

平均值會把選出來的資料平均,
例如:大家的平均學費。

SELECT AVG(fee) FROM test.student s LEFT JOIN class c on s.class=c.id ;

上一篇
第二十一日-把不同表格的資料合在一起:UNION、FULL JOIN
下一篇
第二十三日-MYSQL常用時間函數:加加減減各種日期選取
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
kouhei
iT邦新手 5 級 ‧ 2023-10-26 14:44:36

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);

我要留言

立即登入留言