聚合函数
先准备数据内容
MariaDB [mysql_demo1]> select * from students;
+----+-----------+------+--------+--------+--------+-----------+
| id | name | age | height | gender | cls_id | is_delete |
+----+-----------+------+--------+--------+--------+-----------+
| 1 | 小明 | 18 | 180.00 | 男 | 1 | |
| 2 | 小张 | 18 | 160.00 | 男 | 2 | |
| 3 | 小红 | 20 | 170.00 | 女 | 1 | |
| 4 | 周杰 | 38 | 175.00 | 男 | 1 | |
| 5 | 彭玉宴 | 56 | 150.00 | 男 | 2 | |
| 6 | 刘德化 | 29 | 150.00 | 男 | 2 | |
| 7 | 张学友 | 36 | 180.00 | 男 | 1 | |
| 8 | 周杰伦 | 25 | 166.00 | 男 | 1 | |
| 9 | 风姐 | 16 | 169.00 | 女 | 1 | |
| 10 | 王小明 | 57 | 162.00 | 男 | 2 | |
| 11 | 张小华 | 46 | 173.00 | 女 | 1 | |
| 12 | 金星 | 29 | 175.00 | 女 | 1 | |
| 13 | 黄蓉 | 66 | 185.00 | 中性 | 2 | |
| 14 | 古天乐 | 15 | 186.00 | 保密 | 2 | |
| 15 | 刘小海 | 31 | 175.00 | 保密 | 1 | |
| 16 | 小月月 | 57 | 163.00 | 女 | 1 | |
+----+-----------+------+--------+--------+--------+-----------+
16 rows in set (0.00 sec)
MariaDB [mysql_demo1]> select * from classes;
+----+--------------+
| id | name |
+----+--------------+
| 1 | python_01期 |
| 2 | python_02期 |
+----+--------------+
2 rows in set (0.00 sec)
统计行数 有一行算一行
count() --该方法效率高一些
count(1) – 该方法是统计第一列 如ID
count(列名) --该方法是判断列有多少行 如果该行有null 则少1 所以查询出来要比对 性能低
格式为:select count() from 表名; 后面也可以加条件 where 条件
MariaDB [mysql_demo1]> select count(*) from students;
+----------+
| count(*) |
+----------+
| 16 |
+----------+
1 row in set (0.00 sec)
MariaDB [mysql_demo1]> select count(*) from students where gender='男';
+----------+
| count(*) |
+----------+
| 8 |
+----------+
1 row in set (0.00 sec)
最大值: max()
select max(列名) from 表名 或加条件
MariaDB [mysql_demo1]> select max(height) from students;
+-------------+
| max(height) |
+-------------+
| 186.00 |
+-------------+
1 row in set (0.00 sec)
最小值: min()
select min(列名) from 表名 或加条件
MariaDB [mysql_demo1]> select min(height) from students;
+-------------+
| min(height) |
+-------------+
| 150.00 |
+-------------+
1 row in set (0.00 sec)
求和: sum()
select sum(列名) from 表名 或加条件
MariaDB [mysql_demo1]> select sum(height) from students;
+-------------+
| sum(height) |
+-------------+
| 2719.00 |
+-------------+
1 row in set (0.00 sec)
平均值: avg()
select avg(列名) from 表名 或加条件
MariaDB [mysql_demo1]> select avg(height) from students;
+-------------+
| avg(height) |
+-------------+
| 169.937500 |
+-------------+
1 row in set (0.00 sec)
四舍五入 round(123.23 , 1) 保留1位小数, 四舍五入
计算所有人的平均年龄,保留2位小数
MariaDB [mysql_demo1]> select round(avg(height),2) from students;
+----------------------+
| round(avg(height),2) |
+----------------------+
| 169.94 |
+----------------------+
1 row in set (0.00 sec)
聚合统计
group by
查询班级的学生性别
有两种方法 1:distinck 2:group by
MariaDB [mysql_demo1]> select distinct gender from students;
+--------+
| gender |
+--------+
| 男 |
| 女 |
| 中性 |
| 保密 |
+--------+
4 rows in set (0.00 sec)
MariaDB [mysql_demo1]> select gender from students group by gender;
+--------+
| gender |
+--------+
| 男 |
| 女 |
| 中性 |
| 保密 |
+--------+
4 rows in set (0.00 sec)
查询每种性别的人数 可以结合count(*)
MariaDB [mysql_demo1]> select count(*),gender from students group by gender;
+----------+--------+
| count(*) | gender |
+----------+--------+
| 8 | 男 |
| 5 | 女 |
| 1 | 中性 |
| 2 | 保密 |
+----------+--------+
4 rows in set (0.00 sec)
查询每种分组数据中的人的姓名 group_concat(列名)
MariaDB [mysql_demo1]> select gender,group_concat(name) from students group by gender;
+--------+------------------------------------------------------------------------+
| gender | group_concat(name) |
+--------+------------------------------------------------------------------------+
| 男 | 小明,周杰伦,张学友,刘德化,彭玉宴,周杰,小张,王小明 |
| 女 | 金星,张小华,风姐,小红,小月月 |
| 中性 | 黄蓉 |
| 保密 | 古天乐,刘小海 |
+--------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)
查询同种性别中的姓名和身高
MariaDB [mysql_demo1]> select gender,group_concat(name,height) from students group by gender;
+--------+------------------------------------------------------------------------------------------------------------------------+
| gender | group_concat(name,height) |
+--------+------------------------------------------------------------------------------------------------------------------------+
| 男 | 小明180.00,周杰伦166.00,张学友180.00,刘德化150.00,彭玉宴150.00,周杰175.00,小张160.00,王小明162.00 |
| 女 | 金星175.00,张小华173.00,风姐169.00,小红170.00,小月月163.00 |
| 中性 | 黄蓉185.00 |
| 保密 | 古天乐186.00,刘小海175.00 |
+--------+------------------------------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)
对group by 分组之后做筛选 having 条件
MariaDB [mysql_demo1]> select gender from students group by gender having gender='男';
+--------+
| gender |
+--------+
| 男 |
+--------+
1 row in set (0.00 sec)
MariaDB [mysql_demo1]> select gender,group_concat(name,height) from students group by gender having gender='男';
+--------+------------------------------------------------------------------------------------------------------------------------+
| gender | group_concat(name,height) |
+--------+------------------------------------------------------------------------------------------------------------------------+
| 男 | 小明180.00,周杰伦166.00,张学友180.00,刘德化150.00,彭玉宴150.00,周杰175.00,小张160.00,王小明162.00 |
+--------+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
having 非等于
MariaDB [mysql_demo1]> select gender from students group by gender having gender!='男';
+--------+
| gender |
+--------+
| 女 |
| 中性 |
| 保密 |
+--------+
3 rows in set (0.00 sec)
MariaDB [mysql_demo1]> select gender,group_concat(name,height) from students group by gender having gender!='男';
+--------+------------------------------------------------------------------------+
| gender | group_concat(name,height) |
+--------+------------------------------------------------------------------------+
| 女 | 金星175.00,张小华173.00,风姐169.00,小红170.00,小月月163.00 |
| 中性 | 黄蓉185.00 |
| 保密 | 古天乐186.00,刘小海175.00 |
+--------+------------------------------------------------------------------------+
3 rows in set (0.00 sec)
having 和 where 的区别
having 只能对分组之后的数据做条件筛选, 有having 就一定有 group by, 有 group by 不一定有having
where 是对查询的源数据做条件筛选
分页 按需加载 limit (start,count)
– limit start, count limit 限制的条数
– start: 表示从哪里开始查询, start 默认值为0, 可以省略, 跳过多少条数据
– count: 查询多少条
--获取第一页, 每页显示4条数据
select * from students limit 0,1;
select * from students limit 1;
第1页 --- 分了几页 --- 分了一页 list (下标) 14 个数
select * from students limit 0,14; 0 是否和id有关联 1 2
第2页 --- 从第4条数据 查询, 查询出来4条数据
select * from students limit 4,4;
第3页
select * from students limit (3-1)*4,4;
第4页
select * from students limit 12,4;
#
select * from students limit (n-1)*m,m;
#每页显示m条数据 ,显示n页
#100 5 20
# 5
(n-1)*m,m -- 简单公式