MySQL数据库增删改查02
十一.统计类函数使用
如果我们想知道总用户数怎么办?
查询谁是数据表里的首富怎么办?
如果我们想知道用户的平均金额怎么办?
如果我们想知道所有用户的总金额怎么办?
统计类函数最常用的我们有四个:
函数说明
sum 求和
count 统计总数
max 最大值
min 最小值
avg 平均值
注:当然你知道其他的mysql函数也可以使用。不过,在实际工作中,大公司的很多大中型项上很少使用,他们都有专门的计数服务器。因为,mysql的计算量本身很大,为了减少压力通常我们将实际的计算任务交给业务服务器或其他服务器来完成
十二 分组group by
我们那金额表里面的省份进行分组数据,分组数据后你会发现有相同的省份会去掉,即一个省份为一个组.
语法: select * from 表 group by 字段
eg: select * from money group by province;
ps: 按照地区进行分组
mysql> select * from money group by province;
+----+-----------+---------+-----------+-----+-----+
| id | username | balance | province | age | sex |
+----+-----------+---------+-----------+-----+-----+
| 7 | 杨幂 | 123 | 北京 | 30 | 0 |
| 12 | 郭德纲 | 212 | 天津 | 43 | 1 |
| 2 | 范冰冰 | 260.23 | 山东 | 40 | 0 |
| 1 | 王宝强 | 120.02 | 湖北 | 29 | 1 |
| 9 | 柳岩 | 23.4 | 湖南 | 36 | 0 |
| 4 | 井柏然 | 810 | 辽宁 | 27 | 1 |
| 5 | 李冰冰 | 20.15 | 黑龙江 | 43 | 0 |
+----+-----------+---------+-----------+-----+-----+
统计分组(分类)个总数:
mysql> select deptno, count(1) from emp group by deptno;
+--------+----------+
| deptno | count(1) |
+--------+----------+
| 1 | 1 |
| 2 | 5 |
| 3 | 1 |
| 5 | 4 |
+--------+----------+
4 rows in set (0.04 sec)
统计省份数量后在进行分组显示
mysql> select count(province),province from money group by province;
+-----------------+-----------+
| count(province) | province |
+-----------------+-----------+
| 3 | 北京 |
| 1 | 天津 |
| 3 | 山东 |
| 1 | 湖北 |
| 1 | 湖南 |
| 2 | 辽宁 |
| 1 | 黑龙江 |
+-----------------+-----------+
7 rows in set (0.00 sec)
在分组基础上进行统计
with rollup 用的很少,这个知识点设置为零了解级别.
他的主要功能是对于分组的数据进行统计后,再进行一次总数统计.
语法: select * from 表 group by 字段 with rollup
eg: select count(province),province from money group by province with rollup;
ps: 对分组的数再次进行统计
在上面的基础上统计总数,下列结果总,最后多了一个12null.
mysql> select count(province),province from money group by province with rollup;
+-----------------+-----------+
| count(province) | province |
+-----------------+-----------+
| 3 | 北京 |
| 1 | 天津 |
| 3 | 山东 |
| 1 | 湖北 |
| 1 | 湖南 |
| 2 | 辽宁 |
| 1 | 黑龙江 |
| 12 | NULL |
+-----------------+-----------+
8 rows in set (0.00 sec)
结果在过滤having
having子句与where有相似之处但也有区别,都是设定条件的语句.
having 是筛选组,而where是筛选记录
类别 详细解释
语法: select * from 表 group by 字段 having 条件
eg: select count(province) ad result ,province from money group by province hacing result>2;
ps: 对地区分组并统计总数,将分组结果大于2的分组地区显示出来
mysql> select count(province) as result ,province from money group by province having result >2;
+--------+----------+
| result | province |
+--------+----------+
| 3 | 北京 |
| 3 | 山东 |
+--------+----------+
2 rows in set (0.00 sec)
整体使用SQL
我们现在将语句进行整合后,配合使用一次,整体的SQL语句配合使用的语法结构如下:
select
[字段1[as 别名 1,][函数(字段2),]....字段n]
from 表名
[where where 条件]
[group by 字段]
[having where_contition]
[order 条件]
[limit 条件]
注意:上面语句中可以[]代表可选,最终语法总结如下:
关键词 说明
select 选择的列
from 表
where 查询的条件
group by 分组属性, having 分组过滤的条件
order by 排序属性
limit 其实记录位置,取记录的条数
我们进行一次整体的结合使用,查询 money表字段"id,username,balance,province 要求id >1 余额大于50,使用地区进行分组,我们使用用户ID进行降序,要求只准显示3条,最后将SQL语句写成,查询结果如下:
mysql> select id,username,balance,province from money where id > 1 and balance > 50 group by province order by id desc limit 3;
+----+-----------+---------+----------+
| id | username | balance | province |
+----+-----------+---------+----------+
| 12 | 郭德纲 | 212 | 天津 |
| 7 | 杨幂 | 123 | 北京 |
| 4 | 井柏然 | 810 | 辽宁 |
+----+-----------+---------+----------+
3 rows in set (0.00 sec)

浙公网安备 33010602011771号