12.1 基本匯總函數(shù)
MySQL提供了基本的聚集函數(shù)砌庄,可以用于求平均值全谤、頻數(shù)等笙什,所謂的聚集函數(shù)(aggregate function):
指運(yùn)行在行組上铜异,計(jì)算和返回單個(gè)值的函數(shù)奶卓。
12.1.1 AVG函數(shù)
使用AVG函數(shù)可以用來求平均值:
SELECT AVG(prod_price) AS avg_price
FROM products;
除此之外网杆,AVG還可以搭配上WHERE子句來查詢特定條件下的平均值哎甲,但有以下兩點(diǎn)可能需要注意的是:
- AVG每次只能作用單列的平均值著榴,如果想獲得多列的平均值就要多次使用
- NULL值會(huì)被AVG函數(shù)給忽略
12.1.2 COUNT函數(shù)
使用COUNT函數(shù)可以用來進(jìn)行頻數(shù)統(tǒng)計(jì):
SELECT COUNT(*) AS num_cust
FROM customers;
其中COUNT函數(shù)有兩種使用方式:
- 一種是COUNT()用來對(duì)行的數(shù)目進(jìn)行計(jì)數(shù)博脑,無論表列中是否包含空值(即不忽略空值*)
- 另一種是使用COUNT(column)來對(duì)特定的列具有的行進(jìn)行計(jì)數(shù)憎乙,但卻忽略NULL值
12.1.3 MAX和MIN函數(shù)
使用MAX和MIN函數(shù)可以返回列中的最大或最小值:
#最大值
SELECT MAX(prod_price) AS max_price
FROM products;
#最小值
SELECT MIN(prod_price) AS min_price
FROM products;
MAX和MIN函數(shù)有以下幾個(gè)共同之處:
- 都要求指定列名
- 可以對(duì)非數(shù)值數(shù)據(jù)使用,例如日期叉趣、文本
- 都忽略NULL值
12.1.4 SUM函數(shù)
使用SUM函數(shù)可以用來求和:
SELECT SUM(quantity) AS items_ordered
FROM orderitems
WHERE order_num = 20005;
除了對(duì)單個(gè)列求和外泞边,SUM函數(shù)還可以用來合計(jì)計(jì)算值:
SELECT SUM(item_price*quantity) AS total_price
FROM orderitems
WHERE order_num = 20005;
12.2 匯總唯一值
以上聚集函數(shù)都是默認(rèn)指定ALL參數(shù)(所有行),如果想要匯總統(tǒng)計(jì)不重復(fù)的值(唯一值)疗杉,那么就需要額外使用DISTINCT參數(shù):
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products
WHERE vend_id = 1003;
- 對(duì)于COUNT函數(shù)阵谚,DISTINCT只能作用于指定列名時(shí),若使用COUNT()則無法起作用*
12.3 匯總組合
以上的示例都是將各個(gè)函數(shù)單獨(dú)拆開時(shí)的用法乡数,其實(shí)可以直接將其作用在同一代碼塊中椭蹄,用逗號(hào)隔開即可:
SELECT COUNT(*) AS num_items,
MIN(prod_price) AS price_min,
MAX(prod_price) AS price_max,
AVG(prod_price) AS price_AVG
FROM products;
- 但需要注意的是,最后一個(gè)與FROM關(guān)鍵字緊挨著的代碼就不需要使用逗號(hào)隔開