這篇文章將為大家詳細(xì)講解有關(guān)MySQL中集合函數(shù)怎么用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比姑蘇網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式姑蘇網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋姑蘇地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
到現(xiàn)在為止,你只學(xué)習(xí)了如何根據(jù)特定的條件從表中取出一條或多條記錄。但是,假如你想對一個(gè)表中的記錄進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。例如,如果你想統(tǒng)計(jì)存儲(chǔ)在表中的一次民意測驗(yàn)的投票結(jié)果?;蛘吣阆胫酪粋€(gè)訪問者在你的站點(diǎn)上平均花費(fèi)了多少時(shí)間。要對表中的任何類型的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),都需要使用集合函數(shù)。你可以統(tǒng)計(jì)記錄數(shù)目,平均值,最小值,最大值,或者求和。當(dāng)你使用一個(gè)集合函數(shù)時(shí),它只返回一個(gè)數(shù),該數(shù)值代表這幾個(gè)統(tǒng)計(jì)值之一。
這些函數(shù)的最大特點(diǎn)就是經(jīng)常和GROUP BY語句配合使用,需要注意的是集合函數(shù)不能和非分組的列混合使用。
行列計(jì)數(shù)
計(jì)算查詢語句返回的記錄行數(shù)
直接計(jì)算函數(shù)COUNT(*)的值,例如,計(jì)算pet表中貓的只數(shù):
>SELECT count(*) FROM pet WHERE species=’cat’;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
統(tǒng)計(jì)字段值的數(shù)目
例如,計(jì)算pet表中species列的數(shù)目:
mysql> SELECT count(species) FROM pet;
+----------------+
| count(species) |
+----------------+
| 9 |
+----------------+
如果相同的種類出現(xiàn)了不止一次,該種類將會(huì)被計(jì)算多次。如果你想知道種類為某個(gè)特定值的寵物有多少個(gè),你可以使用WHERE子句,如下例所示:
mysql> SELECT COUNT(species) FROM pet WHERE species=cat ;
注意這條語句的結(jié)果:
+----------------+
| COUNT(species) |
+----------------+
| 2 |
+----------------+
這個(gè)例子返回種類為cat的作者的數(shù)目。如果這個(gè)名字在表pet中出現(xiàn)了兩次,則次函數(shù)的返回值是2。 而且它和上面提到過的語句的結(jié)果是一致的:
SELECT count(*) FROM pet WHERE species=’cat’
實(shí)際上,這兩條語句是等價(jià)的。
假如你想知道有多少不同種類的的寵物數(shù)目。你可以通過使用關(guān)鍵字DISTINCT來得到該數(shù)目。如下例所示:
mysql> SELECT COUNT(DISTINCT species) FROM pet;
+-------------------------+
| COUNT(DISTINCT species) |
+-------------------------+
| 5 |
+-------------------------+
如果種類cat出現(xiàn)了不止一次,它將只被計(jì)算一次。關(guān)鍵字DISTINCT 決定了只有互不相同的值才被計(jì)算。
通常,當(dāng)你使用COUNT()時(shí),字段中的空值將被忽略。
另外,COUNT()函數(shù)通常和GROUP BY子句配合使用,例如可以這樣返回每種寵物的數(shù)目:
mysql> SELECT species,count(*) FROM pet GROUP BY species;
+---------+----------+
| species | count(*) |
+---------+----------+
| bird | 2 |
| cat | 2 |
| dog | 3 |
| hamster | 1 |
| snake | 1 |
+---------+----------+
計(jì)算字段的平均值
需要計(jì)算這些值的平均值。使用函數(shù)AVG(),你可以返回一個(gè)字段中所有值的平均值。
假如你對你的站點(diǎn)進(jìn)行一次較為復(fù)雜的民意調(diào)查。訪問者可以在1到10之間投票,表示他們喜歡你站點(diǎn)的程度。你把投票結(jié)果保存在名為vote的INT型字段中。要計(jì)算你的用戶投票的平均值,你需要使用函數(shù)AVG():
SELECT AVG(vote) FROM opinion
這個(gè)SELECT語句的返回值代表用戶對你站點(diǎn)的平均喜歡程度。函數(shù)AVG()只能對數(shù)值型字段使用。這個(gè)函數(shù)在計(jì)算平均值時(shí)也忽略空值。
再給出一個(gè)實(shí)際例子,例如我們要計(jì)算pet表中每種動(dòng)物年齡的平均值,那么使用AVG()函數(shù)和GROUP BY子句:
mysql> SELECT species,AVG(CURDATE()-birth) FROM pet GROUP BY species;
返回的結(jié)果為:
+---------+----------------------+
| species | AVG(CURDATE()-birth) |
+---------+----------------------+
| bird | 34160 |
| cat | 74959.5 |
| dog | 112829.66666667 |
| hamster | 19890 |
| snake | 49791 |
+---------+----------------------+
計(jì)算字段值的和
假設(shè)你的站點(diǎn)被用來出售某種商品,已經(jīng)運(yùn)行了兩個(gè)月,是該計(jì)算賺了多少錢的時(shí)候了。假設(shè)有一個(gè)名為orders的表用來記錄所有訪問者的定購信息。要計(jì)算所有定購量的總和,你可以使用函數(shù)SUM():
SELECT SUM(purchase_amount) FROM orders
函數(shù)SUM()的返回值代表字段purchase_amount中所有值的總和。字段purchase_amount的數(shù)據(jù)類型也許是DECIMAL類型,但你也可以對其它數(shù)值型字段使用函數(shù)SUM()。
用一個(gè)不太恰當(dāng)?shù)睦诱f明,我們計(jì)算pet表中同種寵物的年齡的總和:
mysql> SELECT species,SUM(CURDATE()-birth) FROM pet GROUP BY species;
你可以查看結(jié)果,與前一個(gè)例子對照:
+---------+----------------------+
| species | SUM(CURDATE()-birth) |
+---------+----------------------+
| bird | 68320 |
| cat | 149919 |
| dog | 338489 |
| hamster | 19890 |
| snake | 49791 |
+---------+----------------------+
計(jì)算字段值的極值
求字段的極值,涉及兩個(gè)函數(shù)MAX()和MIN()。
例如,還是pet表,你想知道最早的動(dòng)物出生日期,由于日期最早就是最小,所以可以使用MIN()函數(shù):
mysql> SELECT MIN(birth) FROM pet;
+------------+
| MIN(birth) |
+------------+
| 1989-05-13 |
+------------+
但是,你只知道了日期,還是無法知道是哪只寵物,你可能想到這樣做:
SELECT name,MIN(birth) FROM pet;
但是,這是一個(gè)錯(cuò)誤的SQL語句,因?yàn)榧虾瘮?shù)不能和非分組的列混合使用,這里name列是沒有分組的。所以,你無法同時(shí)得到name列的值和birth的極值。
MIN()函數(shù)同樣可以與GROUP BY子句配合使用,例如,找出每種寵物中最早的出生日期:
mysql> SELECT species,MIN(birth) FROM pet GROUP BY species;
下面是令人滿意的結(jié)果:
+---------+------------+
| species | MIN(birth) |
+---------+------------+
| bird | 1997-12-09 |
| cat | 1993-02-04 |
| dog | 1989-05-13 |
| hamster | 1999-03-30 |
| snake | 1996-04-29 |
+---------+------------+
另一方面,如果你想知道最近的出生日期,就是日期的最大值,你可以使用MAX()函數(shù),如下例所示:
mysql> SELECT species,MAX(birth) FROM pet GROUP BY species;
+---------+------------+
| species | MAX(birth) |
+---------+------------+
| bird | 1998-09-11 |
| cat | 1994-03-17 |
| dog | 1990-08-31 |
| hamster | 1999-03-30 |
| snake | 1996-04-29 |
+---------+------------+
關(guān)于“MySQL中集合函數(shù)怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。