聚合函數 MIN、MAX
MySQL 的常見的聚合函數有 AVG、COUNT、SUM、MIN、MAX,上一小節介紹了 AVG、COUNT、SUM 三種聚合函數,本小節介紹如何使用 MIN、MAX 兩種聚合函數,另外再介紹一下如何在 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_course、course、student 表內連接查詢為例:
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. 小結
本小節介紹了如何使用 MIN、MAX 兩種聚合函數對查詢結果集進行篩選,還介紹了如何在 GROUP BY中分組使用聚合函數,并且使用 HAVING 后面的條件對分組數據進行篩選,需要注意的是聚合函數產生的數據列最好重命名,這是因為后端程序語言在處理這些數據時需要規范的字段名,例如:
SELECT AVG(age) AS teacher_avg_age FROM teacher;
查詢結果如下圖: