1. 程式人生 > Mysql入門教學 >28 聚合函式 MIN、MAX

28 聚合函式 MIN、MAX

MySQL 的常見的聚合函式有 AVGCOUNTSUMMINMAX,上一小節介紹了 AVGCOUNTSUM 三種聚合函式,本小節介紹如何使用 MINMAX 兩種聚合函式,另外再介紹一下如何在 GROUP BY 中使用聚合函式。

1.MIN函式取最小值

teacher 表為例,先查所有 teacher 資訊:

SELECT * FROM teacher;

查詢結果如下圖:

圖片描述

可以使用 MIN() 函式對結果集取年齡最小值的資料:

SELECT MIN(age) FROM teacher;

執行結果如下圖:

圖片描述

Tips:如上圖所示,MIN(age) 表示對結果集 age 列取最小值 29

2.MAX函式取最大值

student 表為例,先檢視所有 student 資訊:

 SELECT * FROM student;

查詢結果如下圖:

圖片描述

可以使用 MAX() 函式對結果集取年齡最大值的資料:

SELECT MAX(age) FROM student;

執行結果如下圖:

圖片描述

Tips:如上圖所示,MAX(age) 表示對結果集 age 列取最大值 23

3.GROUP BY HAVING

student_coursecoursestudent 表內連線查詢為例:

SELECT * 
FROM 
student_course a 
INNER JOIN 
student b
ON a.student_id=b.id INNER JOIN course c ON a.course_id=c.id;

查詢結果如下圖:

圖片描述

使用AVG函式取分組資料平均年齡:

SELECT a.course_id,c.course_name,AVG(age) 
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id
GROUP BY a.course_id,c.course_name;

執行結果如下圖 :

圖片描述

可以使用 HAVING

對上述結果篩選,例如選出選課學生平均年齡大於 20 的課程資料:

SELECT a.course_id,c.course_name,AVG(age) 
FROM 
student_course a 
INNER JOIN 
student b 
ON a.student_id=b.id 
INNER JOIN course c 
ON a.course_id=c.id
GROUP BY a.course_id,c.course_name
HAVING AVG(age) >= 20;

執行結果如下圖:

圖片描述

Tips:如上圖所示,演示的是使用 AVG() 函式對分組資料進行篩選,同理,可以分別使用 COUNT()MIN()MAX()SUM() 這四種聚合函式取出分組的資料,並且都可以使用 HAVING 後面的條件對分組聚合函式的值進行篩選。

4. 小結

本小節介紹瞭如何使用 MINMAX 兩種聚合函式對查詢結果集進行篩選,還介紹瞭如何在 GROUP BY 中分組使用聚合函式,並且使用 HAVING 後面的條件對分組資料進行篩選,需要注意的是聚合函式產生的資料列最好重新命名,這是因為後端程式語言在處理這些資料時需要規範的欄位名,例如:

SELECT AVG(age) AS teacher_avg_age FROM teacher;

查詢結果如下圖:

圖片描述