MySQL中集合函数怎么用

72次阅读
没有评论

共计 3519 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 MySQL 中集合函数怎么用,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

到现在为止,你只学习了如何根据特定的条件从表中取出一条或多条记录。但是,假如你想对一个表中的记录进行数据统计。例如,如果你想统计存储在表中的一次民意测验的投票结果。或者你想知道一个访问者在你的站点上平均花费了多少时间。要对表中的任何类型的数据进行统计,都需要使用集合函数。你可以统计记录数目,平均值,最小值,最大值,或者求和。当你使用一个集合函数时,它只返回一个数,该数值代表这几个统计值之一。

这些函数的最大特点就是经常和 GROUP BY 语句配合使用,需要注意的是集合函数不能和非分组的列混合使用。

行列计数

计算查询语句返回的记录行数

直接计算函数 COUNT(*) 的值,例如,计算 pet 表中猫的只数:

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

+———-+

| count(*) |

+———-+

|  2 |

+———-+

统计字段值的数目

例如,计算 pet 表中 species 列的数目:

mysql SELECT count(species) FROM pet;

+—————-+

| count(species) |

+—————-+

|  9 |

+—————-+

如果相同的种类出现了不止一次,该种类将会被计算多次。如果你想知道种类为某个特定值的宠物有多少个,你可以使用 WHERE 子句,如下例所示:

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

注意这条语句的结果:

+—————-+

| COUNT(species) |

+—————-+

|  2 |

+—————-+

这个例子返回种类为 cat 的作者的数目。如果这个名字在表 pet 中出现了两次,则次函数的返回值是 2。而且它和上面提到过的语句的结果是一致的:

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

实际上,这两条语句是等价的。

假如你想知道有多少不同种类的的宠物数目。你可以通过使用关键字 DISTINCT 来得到该数目。如下例所示:

mysql SELECT COUNT(DISTINCT species) FROM pet;

+————————-+

| COUNT(DISTINCT species) |

+————————-+

|  5 |

+————————-+

如果种类 cat 出现了不止一次,它将只被计算一次。关键字 DISTINCT 决定了只有互不相同的值才被计算。

通常,当你使用 COUNT()时,字段中的空值将被忽略。

另外,COUNT() 函数通常和 GROUP BY 子句配合使用,例如可以这样返回每种宠物的数目:

mysql SELECT species,count(*) FROM pet GROUP BY species;

+———+———-+

| species | count(*) |

+———+———-+

| bird  |  2 |

| cat  |  2 |

| dog  |  3 |

| hamster |  1 |

| snake  |  1 |

+———+———-+

计算字段的平均值

需要计算这些值的平均值。使用函数 AVG(),你可以返回一个字段中所有值的平均值。

假如你对你的站点进行一次较为复杂的民意调查。访问者可以在 1 到 10 之间投票,表示他们喜欢你站点的程度。你把投票结果保存在名为 vote 的 INT 型字段中。要计算你的用户投票的平均值,你需要使用函数 AVG():

SELECT AVG(vote) FROM opinion

这个 SELECT 语句的返回值代表用户对你站点的平均喜欢程度。函数 AVG()只能对数值型字段使用。这个函数在计算平均值时也忽略空值。

再给出一个实际例子,例如我们要计算 pet 表中每种动物年龄的平均值,那么使用 AVG() 函数和 GROUP BY 子句:

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

返回的结果为:

+———+———————-+

| species | AVG(CURDATE()-birth) |

+———+———————-+

| bird  |  34160 |

| cat  |  74959.5 |

| dog  |  112829.66666667 |

| hamster |  19890 |

| snake  |  49791 |

+———+———————-+

计算字段值的和

假设你的站点被用来出售某种商品,已经运行了两个月,是该计算赚了多少钱的时候了。假设有一个名为 orders 的表用来记录所有访问者的定购信息。要计算所有定购量的总和,你可以使用函数 SUM():

SELECT SUM(purchase_amount) FROM orders

函数 SUM()的返回值代表字段 purchase_amount 中所有值的总和。字段 purchase_amount 的数据类型也许是 DECIMAL 类型,但你也可以对其它数值型字段使用函数 SUM()。

用一个不太恰当的例子说明,我们计算 pet 表中同种宠物的年龄的总和:

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

你可以查看结果,与前一个例子对照:

+———+———————-+

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

+———+———————-+

| bird  |  68320 |

| cat  |  149919 |

| dog  |  338489 |

| hamster |  19890 |

| snake  |  49791 |

+———+———————-+

计算字段值的极值

求字段的极值,涉及两个函数 MAX() 和 MIN()。

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

mysql SELECT MIN(birth) FROM pet;

+————+

| MIN(birth) |

+————+

| 1989-05-13 |

+————+

但是,你只知道了日期,还是无法知道是哪只宠物,你可能想到这样做:

SELECT name,MIN(birth) FROM pet;

但是,这是一个错误的 SQL 语句,因为集合函数不能和非分组的列混合使用,这里 name 列是没有分组的。所以,你无法同时得到 name 列的值和 birth 的极值。

MIN() 函数同样可以与 GROUP BY 子句配合使用,例如,找出每种宠物中最早的出生日期:

mysql SELECT species,MIN(birth) FROM pet GROUP BY species;

下面是令人满意的结果:

+———+————+

| species | MIN(birth) |

+———+————+

| bird  | 1997-12-09 |

| cat  | 1993-02-04 |

| dog  | 1989-05-13 |

| hamster | 1999-03-30 |

| snake  | 1996-04-29 |

+———+————+

另一方面,如果你想知道最近的出生日期,就是日期的最大值,你可以使用 MAX() 函数,如下例所示:

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 |

+———+————+

关于“MySQL 中集合函数怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计3519字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)