加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

MySQL分组查询和聚合函数

发布时间:2020-11-28 11:20:36 所属栏目:云计算 来源:网络整理
导读:这篇文章首要先容了MySQL 分组查询和聚合函数的相干资料,辅佐各人更好的领略和行使MySQL,感乐趣的伴侣可以相识下
副问题[/!--empirenews.page--]

信托我们常常会碰着这样的场景:想要相识双十一天猫购置扮装品的职员中均匀斲丧额度是几多(这也许有利于对商品价值区间的定位);可能差异年数段的扮装品斲丧占比是几多(这也许有助于对商品备货量的预估)。

这个时辰就要用到分组查询,分组查询的目标是为了把数据分成多个逻辑组(购置扮装品的职员是一个组,差异年数段购置扮装品的职员也是组),并对每个组举办聚合计较的进程:。

分组查询的语法名目如下:

select cname, group_fun,... from tname [where condition]
 group by group_expression [having group_condition]; 

声名一下:

1、group_fun 代表聚合函数,是指对分组的数据举办聚合计较的函数。

2、group_expression 代表分组表达式,应承多个,多个之间行使逗号离隔。

3、group_condition 分组之后,再对分组后的数据举办前提过滤的进程。

4、分组语法中,select后头呈现的字段 要么是group by后头的字段,要么是聚合函数的列,其他范例会报非常,我们下面的内容中会具体声名。

说分组之前,先来看看聚合函数,聚合函数是分组查询语法名目中重要的一部门。我们常常必要汇总数据而不消把它们现实检索出来,以是MySQL提供了专门的函数。行使这些函数,可用于计较我们必要的数据,以便说明和天生报表。

聚合函数

聚合函数有以下几种。

AVG()函数

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

下面示例返回用户表顶用户的均匀年数:

mysql> select * from user2;
+----+--------+------+----------+-----+
| id | name  | age | address | sex |
+----+--------+------+----------+-----+
| 1 | brand |  21 | fuzhou  |  1 |
| 2 | helen |  20 | quanzhou |  0 |
| 3 | sol  |  21 | xiamen  |  0 |
| 4 | weng  |  33 | guizhou |  1 |
| 5 | selina |  25 | NULL   |  0 |
| 6 | anny  |  23 | shanghai |  0 |
| 7 | annd  |  24 | shanghai |  1 |
| 8 | sunny | NULL | guizhou |  0 |
+----+--------+------+----------+-----+
8 rows in set

mysql> select avg(age) from user2;
+----------+
| avg(age) |
+----------+
| 23.8571 |
+----------+
1 row in set

留意点:

1、AVG()只能用来确定特定命值列的均匀值 。

2、AVG()函数忽略列值为NULL的行,以是上图中age值累加之后是除以7,而不是除以8。

COUNT()函数

COUNT()函数举办计数。 可以用COUNT()确定表中切合前提的行的数量。

count 有 count(*)、count(详细字段)、count(常量) 三种方法来浮现 下面 演示了count(*) 和 count(cname)的用法。

mysql> select * from user2;
+----+--------+------+----------+-----+
| id | name  | age | address | sex |
+----+--------+------+----------+-----+
| 1 | brand |  21 | fuzhou  |  1 |
| 2 | helen |  20 | quanzhou |  0 |
| 3 | sol  |  21 | xiamen  |  0 |
| 4 | weng  |  33 | guizhou |  1 |
| 5 | selina |  25 | NULL   |  0 |
| 6 | anny  |  23 | shanghai |  0 |
| 7 | annd  |  24 | shanghai |  1 |
| 8 | sunny | NULL | guizhou |  0 |
+----+--------+------+----------+-----+
8 rows in set

mysql> select count(*) from user2 where sex=0;
+----------+
| count(*) |
+----------+
|    5 |
+----------+
1 row in set

mysql> select count(age) from user2 where sex=0;
+------------+
| count(age) |
+------------+
|     4 |
+------------+
1 row in set

可以看到,都是取出女生的用户数目,count(*) 比 count(age) 多一个,那是由于age中包括null值。

以是:假如指定列名,则指定列的值为空的行被COUNT()函数忽略,但假如COUNT()函数顶用的是星号( *),则不忽略。

MAX()和MIN()函数

MAX()返回指定列中的最大值,MIN()返回指定列中的最小值。

mysql> select * from user2;
+----+--------+------+----------+-----+
| id | name  | age | address | sex |
+----+--------+------+----------+-----+
| 1 | brand |  21 | fuzhou  |  1 |
| 2 | helen |  20 | quanzhou |  0 |
| 3 | sol  |  21 | xiamen  |  0 |
| 4 | weng  |  33 | guizhou |  1 |
| 5 | selina |  25 | NULL   |  0 |
| 6 | anny  |  23 | shanghai |  0 |
| 7 | annd  |  24 | shanghai |  1 |
| 8 | sunny | NULL | guizhou |  0 |
+----+--------+------+----------+-----+
8 rows in set

mysql> select max(age),min(age) from user2;
+----------+----------+
| max(age) | min(age) |
+----------+----------+
|    33 |    20 |
+----------+----------+
1 row in set

留意:同样的,MAX()、MIN()函数忽略列值为NULL的行。

SUM函数

SUM()用来返回指定列值的和(总计) ,下面返回了全部年数的总和,同样的,忽略了null的值

mysql> select * from user2;
+----+--------+------+----------+-----+
| id | name  | age | address | sex |
+----+--------+------+----------+-----+
| 1 | brand |  21 | fuzhou  |  1 |
| 2 | helen |  20 | quanzhou |  0 |
| 3 | sol  |  21 | xiamen  |  0 |
| 4 | weng  |  33 | guizhou |  1 |
| 5 | selina |  25 | NULL   |  0 |
| 6 | anny  |  23 | shanghai |  0 |
| 7 | annd  |  24 | shanghai |  1 |
| 8 | sunny | NULL | guizhou |  0 |
+----+--------+------+----------+-----+
8 rows in set

mysql> select sum(age) from user2;
+----------+
| sum(age) |
+----------+
| 167   |
+----------+
1 row in set

分组查询

数据筹备,假设我们有一个订货单表如下(记适用户的订单金额和下单时刻):

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读