溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL中集合函數(shù)怎么用

發(fā)布時(shí)間:2022-01-19 15:37:16 來(lái)源:億速云 閱讀:258 作者:小新 欄目:數(shù)據(jù)庫(kù)

這篇文章將為大家詳細(xì)講解有關(guān)MySQL中集合函數(shù)怎么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

到現(xiàn)在為止,你只學(xué)習(xí)了如何根據(jù)特定的條件從表中取出一條或多條記錄。但是,假如你想對(duì)一個(gè)表中的記錄進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。例如,如果你想統(tǒng)計(jì)存儲(chǔ)在表中的一次民意測(cè)驗(yàn)的投票結(jié)果?;蛘吣阆胫酪粋€(gè)訪問(wèn)者在你的站點(diǎn)上平均花費(fèi)了多少時(shí)間。要對(duì)表中的任何類型的數(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語(yǔ)句配合使用,需要注意的是集合函數(shù)不能和非分組的列混合使用。

行列計(jì)數(shù)

計(jì)算查詢語(yǔ)句返回的記錄行數(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 ;

注意這條語(yǔ)句的結(jié)果:

+----------------+

| COUNT(species) |

+----------------+

|              2 |

+----------------+

這個(gè)例子返回種類為cat的作者的數(shù)目。如果這個(gè)名字在表pet中出現(xiàn)了兩次,則次函數(shù)的返回值是2。 而且它和上面提到過(guò)的語(yǔ)句的結(jié)果是一致的:

SELECT count(*) FROM pet WHERE species=’cat’

實(shí)際上,這兩條語(yǔ)句是等價(jià)的。

假如你想知道有多少不同種類的的寵物數(shù)目。你可以通過(guò)使用關(guān)鍵字DISTINCT來(lái)得到該數(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è)字段中所有值的平均值。

假如你對(duì)你的站點(diǎn)進(jìn)行一次較為復(fù)雜的民意調(diào)查。訪問(wèn)者可以在1到10之間投票,表示他們喜歡你站點(diǎn)的程度。你把投票結(jié)果保存在名為vote的INT型字段中。要計(jì)算你的用戶投票的平均值,你需要使用函數(shù)AVG():

SELECT AVG(vote) FROM opinion

這個(gè)SELECT語(yǔ)句的返回值代表用戶對(duì)你站點(diǎn)的平均喜歡程度。函數(shù)AVG()只能對(duì)數(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)被用來(lái)出售某種商品,已經(jīng)運(yùn)行了兩個(gè)月,是該計(jì)算賺了多少錢的時(shí)候了。假設(shè)有一個(gè)名為orders的表用來(lái)記錄所有訪問(wèn)者的定購(gòu)信息。要計(jì)算所有定購(gòu)量的總和,你可以使用函數(shù)SUM():

SELECT SUM(purchase_amount) FROM orders

函數(shù)SUM()的返回值代表字段purchase_amount中所有值的總和。字段purchase_amount的數(shù)據(jù)類型也許是DECIMAL類型,但你也可以對(duì)其它數(shù)值型字段使用函數(shù)SUM()。

用一個(gè)不太恰當(dāng)?shù)睦诱f(shuō)明,我們計(jì)算pet表中同種寵物的年齡的總和:

mysql> SELECT species,SUM(CURDATE()-birth) FROM pet GROUP BY species;

你可以查看結(jié)果,與前一個(gè)例子對(duì)照:

+---------+----------------------+

| 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 |

+------------+

但是,你只知道了日期,還是無(wú)法知道是哪只寵物,你可能想到這樣做:

SELECT name,MIN(birth) FROM pet;

但是,這是一個(gè)錯(cuò)誤的SQL語(yǔ)句,因?yàn)榧虾瘮?shù)不能和非分組的列混合使用,這里name列是沒(méi)有分組的。所以,你無(wú)法同時(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)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI