您好,登錄后才能下訂單哦!
小編給大家分享一下MySQL數據查詢中如何使用集合/聚合函數查詢,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
MySQL聚合函數如下:
函數 | 作用 |
---|---|
avg() | 返回某列的平均值 |
count() | 返回某列的行數 |
max() | 返回某列的最大值 |
min() | 返回某列的最小值 |
sum() | 返回某列值的和 |
(1)count()函數
(2)sum()函數
(3)avg()函數
(4)max()函數
(5)min()函數
(免費學習推薦:mysql視頻教程)
count()函數統計數據表中包含的記錄行的總數,或者根據查詢結果返回列中包含的數據行數,有兩種使用方法:
①count(*)計算表中總的行數,不管某列有數值或者為空值。
②count(字段名)計算指定列下總的行數,計算時將忽略空值的行。
【例1】查詢customers表中總的行數,SQL語句如下:
mysql> select count(*) as cust_num -> from customers;+----------+| cust_num |+----------+| 4 |+----------+1 row in set (0.06 sec)
由查詢結果可知,count(*)返回customers表中記錄的總行數,不管其值是什么。返回的總數的名稱為cust_num。
【例2】查詢customers表中有電子郵箱的顧客的總數,SQL語句如下:
mysql> select count(c_email) as email_num -> from customers;+-----------+| email_num |+-----------+| 3 |+-----------+1 row in set (0.00 sec)
上面兩個例子結果不同說明兩種方式在計算總數的時候對待null值的方式不同,即指定列的值為空的行被count()函數忽略,但是如果不指定列,而在count()函數中使用*,則所有記錄都不忽略。
【例3】在orderitems表中,使用count()函數與group by關鍵字一起使用,用來計算不同分組中的記錄總數。
mysql> select o_num,count(f_id) -> from orderitems -> group by o_num;+-------+-------------+| o_num | count(f_id) |+-------+-------------+| 30001 | 4 || 30002 | 1 || 30003 | 1 || 30004 | 1 || 30005 | 4 |+-------+-------------+5 rows in set (0.00 sec)
sum是一個求總和的函數,返回指定列值的總和。
【例】在orderitems表中查詢30005號訂單一共購買的水果總量,SQL語句如下:
mysql> select sum(quantity) as items_total -> from orderitems -> where o_num = 30005;+-------------+| items_total |+-------------+| 30 |+-------------+1 row in set (0.05 sec)
sum()可以和group by一起使用,用來計算每個分組的總和。
【例】在orderitems表中,使用sum()函數統計不同訂單號中訂購的水果總量,SQL語句如下:
mysql> select o_num,sum(quantity) as items_total -> from orderitems -> group by o_num;+-------+-------------+| o_num | items_total |+-------+-------------+| 30001 | 33 || 30002 | 2 || 30003 | 100 || 30004 | 50 || 30005 | 30 |+-------+-------------+5 rows in set (0.00 sec)
sum函數在計算時,忽略值為null的行。
avg()函數通過計算返回的行數和每一列數據的和,求得指定列數據的平均值。
avg()函數使用時,其參數為要計算的列名稱,如果要得到多個列的多個平均值,則需要在每一列上使用avg()函數。
【例1】在fruits表中,查詢s_id=103的供應商的水果價格的平均值,SQL語句如下:
mysql> select avg(f_price) as avg_price -> from fruits -> where s_id = 103;+-----------+| avg_price |+-----------+| 5.700000 |+-----------+1 row in set (0.05 sec)
【例2】在fruits表中,查詢每一個供應商的水果價格的平均值,SQL語句如下:
mysql> select s_id,avg(f_price) as avg_price -> from fruits -> group by s_id;+------+-----------+| s_id | avg_price |+------+-----------+| 104 | 7.000000 || 101 | 6.200000 || 103 | 5.700000 || 107 | 3.600000 || 102 | 8.933333 || 105 | 7.466667 || 106 | 15.700000 |+------+-----------+7 rows in set (0.00 sec)
group by 關鍵字根據s_id字段對記錄進行分組,然后計算出每個分組的平均值,這種分組求平均值的方法非常有用。例如,求不同班級學生成績的平均值,求不同部門工人的平均工資,求各地的年平均氣溫等。
max()返回指定列中的最大值。
max()函數除了用來找出最大的列值或日期值之外,還能返回任意列中的最大值,包括返回字符類型的最大值。
【例1】在fruits表中查找市場上價格最高的水果值,SQL語句如下:
mysql> select max(f_price) as max_price from fruits;+-----------+| max_price |+-----------+| 15.70 |+-----------+1 row in set (0.05 sec)
【例2】在fruits表中查找不同供應商提供的價格最高的水果值,SQL語句如下:
mysql> select s_id,max(f_price) as max_price -> from fruits -> group by s_id;+------+-----------+| s_id | max_price |+------+-----------+| 104 | 7.60 || 101 | 10.20 || 103 | 9.20 || 107 | 3.60 || 102 | 11.20 || 105 | 11.60 || 106 | 15.70 |+------+-----------+7 rows in set (0.00 sec)
【例3】在fruits表中查找f_name的最大值,SQL語句如下:
mysql> select max(f_name) from fruits;+-------------+| max(f_name) |+-------------+| xxxx |+-------------+1 row in set (0.00 sec)
- min()返回查詢列中的最小值。
【例1】在fruits表中查找市場上價格最低的水果值,SQL語句如下:
mysql> select min(f_price) as min_price -> from fruits;+-----------+| min_price |+-----------+| 2.20 |+-----------+1 row in set (0.00 sec)
【例2】在fruits表中查找不同供應商提供的價格最低的水果汁,SQL語句如下:
mysql> select s_id,min(f_price) as min_price -> from fruits -> group by s_id;+------+-------------+| s_id | min_price |+------+-------------+| 104 | 6.40 || 101 | 3.20 || 103 | 2.20 || 107 | 3.60 || 102 | 5.30 || 105 | 2.60 || 106 | 15.70 |+------+-------------+7 rows in set (0.00 sec)
看完了這篇文章,相信你對“MySQL數據查詢中如何使用集合/聚合函數查詢”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。