1. 程式人生 > 實用技巧 >MySQL教程63-MySQL 聚合函式

MySQL教程63-MySQL 聚合函式

MAX函式:查詢指定列的最大值

MySQLMAX() 函式是用來返回指定列中的最大值。

為了方便理解,首先建立一個學生成績表 tb_students_score,學生成績表的資料內容如下所示。

mysql> use test_db;
Database changed
mysql> SELECT * FROM tb_students_score;
+--------------+---------------+
| student_name | student_score |
+--------------+---------------+
| Dany         |            90
| | Green | 99 | | Henry | 95 | | Jane | 98 | | Jim | 88 | | John | 94 | | Lily | 100 | | Susan | 96 | | Thomas | 93 | | Tom | 89 | +--
------------+---------------+ 10 rows in set (0.13 sec)
View Code

【例項 1】在 tb_students_score 表中查詢最高的成績,輸入的 SQL 語句和執行結果如下所示。

mysql> SELECT MAX(student_score)
    -> AS max_score
    -> FROM tb_students_score;
+-----------+
| max_score |
+-----------+
|       100 |
+-----------+
1 row in set (0.06
sec)
View Code

由執行結果可以看到,MAX() 函式查詢出 student_score 欄位的最大值為 100。

MAX() 函式不僅適用於查詢數值型別,也可應用於字元型別。

【例項 2】在 tb_students_score 表中查詢 student_name 的最大值,輸入的 SQL 語句和執行結果如下所示。

mysql> SELECT MAX(student_name)
    -> AS max_name
    -> FROM tb_students_score;
+----------+
| max_name |
+----------+
| Tom      |
+----------+
1 row in set (0.03 sec)
View Code

由執行結果可以看到,MAX() 函式可以對字母進行大小判斷,並返回最大的字元或者字串值。

注意:MAX() 函式還可以返回任意列中的最大值,包括返回字元型別的最大值。在對字元型別的資料進行比較時,按照字元的 ASCII 碼值大小進行比較,從 a~z,a 的 ASCII 碼最小,z 的最大。在比較時,先比較第一個字元,如果相等,繼續比較下一個字元,一直到兩個字元不相等或者字元結束為止。例如,b 與 t 比較時,t 為最大值;bcd 與 bca 比較時,bcd 為最大值。

MIN函式:查詢指定列的最小值

MySQLMIN() 函式是用來返回查詢列中的最小值。

操作類似MAX函式, 只是作用相反, 不贅述

提示:MIN() 函式與 MAX() 函式類似,不僅適用於查詢數值型別,也可應用於字元型別。

COUNT函式:統計查詢結果的行數

MySQLCOUNT() 函式統計資料表中包含的記錄行的總數,或者根據查詢結果返回列中包含的資料行數,使用方法有以下兩種:

  • COUNT(*) 計算表中總的行數,無論某列有數值或者為空值。
  • COUNT(欄位名)計算指定列下總的行數,計算時將忽略空值的行。

這裡需要用到以下在介紹MAX()函式時建立的表tb_students_score 。

【例項】查詢 tb_students_score 表中總的行數,輸入的 SQL 語句和執行結果如下所示。

mysql> SELECT COUNT(student_name)
    -> AS students_number
    -> FROM tb_students_score;
+-----------------+
| students_number |
+-----------------+
|              10 |
+-----------------+
1 row in set (0.03 sec)
View Code

由查詢結果可以看到,COUNT(*) 返回 tb_students_score 表中記錄的總行數,無論值是什麼。返回的總數的名稱為 students_number。

提示:在計算總數的時候對待 NULL 值的方式是,指定列的值為空的行被 COUNT() 函式忽略,但若不指定列,而在 COUNT() 函式中使用星號“*”,則所有記錄都不忽略。

SUM函式:求和

MySQLSUM() 是一個求總和的函式,返回指定列值的總和。

SUM() 函式是如何工作的?

  • 如果在沒有返回匹配行 SELECT 語句中使用 SUM 函式,則 SUM 函式返回 NULL,而不是 0。
  • DISTINCT 運算子允許計算集合中的不同值。
  • SUM 函式忽略計算中的 NULL 值。

這裡需要用到以下在介紹MAX()函式時建立的表tb_students_score 。

【例項】在 tb_students_score 表中計算學生成績的總分,輸入的 SQL 語句和執行結果如下所示。

mysql> SELECT SUM(student_score)
    -> AS score_sum
    -> FROM tb_students_score;
+-----------+
| score_sum |
+-----------+
|       942 |
+-----------+
1 row in set (0.00 sec)
View Code

由查詢結果可以看到,SUM() 函式返回學生的所有成績之和為 942。

提示:SUM() 函式在計算時,忽略列值為 NULL 的行。

AVG函式:求平均值

MySQLAVG() 函式通過計算返回的行數和每一行資料的和,求得指定列資料的平均值。

這裡需要用到以下在介紹MAX()函式時建立的表tb_students_score 。

【例項】在 tb_students_score 表中,查詢所有學生成績的平均值,輸入的 SQL 語句和執行結果如下所示。

mysql> SELECT AVG(student_score)
    -> AS score_avg
    -> FROM tb_students_score;
+-----------+
| score_avg |
+-----------+
|   94.2000 |
+-----------+
1 row in set (0.03 sec)
View Code
提示:使用 AVG() 函式時,引數為要計算的列名稱,若要得到多個列的平均值,則需要在每一列都使用 AVG() 函式。