深入浅析MySQL数据库中的聚合函数与分组查询

  介绍

本篇文章给大家分享的是有关深入浅析MySQL数据库中的聚合函数与分组查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>

相信我们经常会遇到这样的场景:想要了解双十一天猫购买化妆品的人员中平均消费额度是多少(这可能有利于对商品价格区间的定位),或者不同年龄段的化妆品消费占比是多少(这可能有助于对商品备货量的预估)。

这个时候就要用到分组查询,分组查询的目的是为了把数据分成多个逻辑组(购买化妆品的人员是一个组,不同年龄段购买化妆品的人员也是组),并对每个组进行聚合计算的过程:。

分组查询的语法格式如下:

选择cname, group_fun,…从tname(在条件)
  group by group_expression[有group_condition];, 

说明一下:

1, group_fun代表聚合函数,是指对分组的数据进行聚合计算的函数。

2, group_expression代表分组表达式,允许多个,多个之间使用逗号隔开。

3, group_condition 分组之后,再对分组后的数据进行条件过滤的过程。

4分组语法中,选择后面出现的字段要么是group by后面的字段,要么是聚合函数的列,其他类型会报异常,我们下面的内容中会详细说明只

说分组之前,先来看看聚合函数,聚合函数是分组查询语法格式中重要的一部分。我们经常需要汇总数据而不用把它们实际检索出来,所以MySQL提供了专门的函数。使用这些函数,可用于计算我们需要的数据,以便分析和生成报表。

聚合函数有以下几种只

函数说明AVG()返回指定字段的平均值计数()返回查询结果行数MAX()返回指定字段的最大值最小()返回指定字段的最小值总和()返回指定字段的求和值

<强> AVG()函数

AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值。AVG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。

下面示例返回用户表中用户的平均年龄:

mysql>从user2 select *;   + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + +   | | id名称|年龄性| | |地址   + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + +   品牌| 1 | | | 21日福州| 1 |   海伦| 2 | | 20 |泉州| 0 |   | 3 |索尔21厦门| 0 | | |   贵州33翁| 4 | | | | 1 |   | 5 |塞琳娜25零| 0 | | |   | 6 |安妮| | 0 | | 23日上海   | | 7 annd | 24 | 1 | |上海   | 8零贵州| | 0 | | |晴天   + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + +   8行设置      mysql>从user2选择avg(年龄);   + - - - - - - - - - - - +   | | avg(年龄)   + - - - - - - - - - - - +   | 23.8571 |   + - - - - - - - - - - - +   1行组

注意点:

1, AVG()只能用来确定特定数值列的平均值。
2, AVG()函数忽略列值为空的行,所以上图中年龄值累加之后是除以7,而不是除以8只,

<强> COUNT()函数

COUNT()函数进行计数。可以用计数()确定表中符合条件的行的数目。

计数有COUNT(*),计数(具体字段),计数(常量)三种方式来体现下面,演示了COUNT(*)和数量(cname)的用法。

mysql>从user2 select *;   + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + +   | | id名称|年龄性| | |地址   + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + +   品牌| 1 | | | 21日福州| 1 |   海伦| 2 | | 20 |泉州| 0 |   | 3 |索尔21厦门| 0 | | |   贵州33翁| 4 | | | | 1 |   | 5 |塞琳娜25零| 0 | | |   | 6 |安妮| | 0 | | 23日上海   | | 7 annd | 24 | 1 | |上海   | 8零贵州| | 0 | | |晴天   + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + +   8行设置      mysql>select count(*)从user2性=0;   + - - - - - - - - - - - +   | | count (*)   + - - - - - - - - - - - +   | 5 |   + - - - - - - - - - - - +   1行组      mysql>选择计数(年龄)从user2性=0;   + - - - - - - - - - - - - +   (年龄)| |计数   + - - - - - - - - - - - - +   | 4 |   + - - - - - - - - - - - - +   1行组

可以看的到,都是取出女生的用户数量,count(*)比计数(年龄)多一个,那是因为年龄中包含空值。

所以:如果指定列名,则指定列的值为空的行被计数()函数忽略,但如果数()函数中用的是星号(*),则不忽略只

深入浅析MySQL数据库中的聚合函数与分组查询