国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL高級特性之集合函數(shù)

2024-07-24 12:58:21
字體:
供稿:網(wǎng)友

到現(xiàn)在為止,你只學(xué)習(xí)了如何根據(jù)特定的條件從表中取出一條或多條記錄。但是,假如你想對一個表中的記錄進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。例如,如果你想統(tǒng)計(jì)存儲在表中的一次民意測驗(yàn)的投票結(jié)果。或者你想知道一個訪問者在你的站點(diǎn)上平均花費(fèi)了多少時間。要對表中的任何類型的數(shù)據(jù)進(jìn)行統(tǒng)計(jì),都需要使用集合函數(shù)。你可以統(tǒng)計(jì)記錄數(shù)目,平均值,最小值,最大值,或者求和。當(dāng)你使用一個集合函數(shù)時,它只返回一個數(shù),該數(shù)值代表這幾個統(tǒng)計(jì)值之一。

這些函數(shù)的最大特點(diǎn)就是經(jīng)常和GROUP BY語句配合使用,需要注意的是集合函數(shù)不能和非分組的列混合使用。

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

計(jì)算查詢語句返回的記錄行數(shù)

直接計(jì)算函數(shù)COUNT(*)的值,例如,計(jì)算pet表中貓的只數(shù):

MySQL>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)了不止一次,該種類將會被計(jì)算多次。如果你想知道種類為某個特定值的寵物有多少個,你可以使用WHERE子句,如下例所示:

mysql> SELECT COUNT(species) FROM pet WHERE species='cat' ;

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

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

| COUNT(species) |

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

|              2 |

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

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

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

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

假如你想知道有多少不同種類的的寵物數(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()時,字段中的空值將被忽略。

另外,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(),你可以返回一個字段中所有值的平均值。

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

SELECT AVG(vote) FROM opinion

這個SELECT語句的返回值代表用戶對你站點(diǎn)的平均喜歡程度。函數(shù)AVG()只能對數(shù)值型字段使用。這個函數(shù)在計(jì)算平均值時也忽略空值。

再給出一個實(shí)際例子,例如我們要計(jì)算pet表中每種動物年齡的平均值,那么使用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)行了兩個月,是該計(jì)算賺了多少錢的時候了。假設(shè)有一個名為orders的表用來記錄所有訪問者的定購信息。要計(jì)算所有定購量的總和,你可以使用函數(shù)SUM():

SELECT SUM(purchase_amount) FROM orders

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

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

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

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

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

| species | SUM(CURDATE()-birth) |

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

| bird    |                68320 |

| cat     |               149919 |

| dog     |               338489 |

| hamster |                19890 |

| snake   |                49791 |

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

計(jì)算字段值的極值

求字段的極值,涉及兩個函數(shù)MAX()和MIN()。

例如,還是pet表,你想知道最早的動物出生日期,由于日期最早就是最小,所以可以使用MIN()函數(shù):

mysql> SELECT MIN(birth) FROM pet;

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

| MIN(birth) |

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

| 1989-05-13 |

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

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

SELECT name,MIN(birth) FROM pet;

但是,這是一個錯誤的SQL語句,因?yàn)榧虾瘮?shù)不能和非分組的列混合使用,這里name列是沒有分組的。所以,你無法同時得到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 |

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

總結(jié)

在本節(jié)中,介紹了一些典型的集合函數(shù)的用法,包括計(jì)數(shù)、均值、極值和總和,這些都是SQL語言中非常常用的函數(shù)。

這些函數(shù)之所以稱之為集合函數(shù),是因?yàn)樗鼈儜?yīng)用在多條記錄中,所以集合函數(shù)最常見的用法就是與GROUP BY子句配合使用,最重要的是集合函數(shù)不能同未分組的列混合使用。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青神县| 额尔古纳市| 富宁县| 乐山市| 教育| 湘西| 江安县| 镇康县| 高密市| 石台县| 汝城县| 沾化县| 南漳县| 松滋市| 炉霍县| 应用必备| 巴林左旗| 柳江县| 弋阳县| 垫江县| 罗山县| 南平市| 永兴县| 惠东县| 朝阳市| 河西区| 安阳市| 马公市| 滕州市| 图片| 河北省| 盘锦市| 大冶市| 南开区| 闵行区| 综艺| 潍坊市| 普安县| 潼关县| 漳州市| 高安市|