mysql数据库优化课程---10、mysql数据库分组聚合
一、总结
一句话总结:select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;
select class,max(id),min(id),count(*),sum(id),avg(id) from user group by class;
count(*)
group by class
1、为什么操作系统要选择linux?
很多开源产品
a、开源产品或者不开源产品的第一版都是linux,windows做不到
b、没有界面的黑屏系统能够极大的节约资源,windows开机就占了1-2g的内存,windows内存释放有问题,你电脑开机几天就要重启,服务器的话也是开了几天就卡了,linux就不会,linux的回收机制还是比较强大的
c、因为linux开源,旗下的很多开源的产品,而且这些开源的产品最开始的版本也是在linux下的,甚至很多都不会发布windows版本
2、mysql随机数函数怎么使用?
order by rand()
3、mysql如何从一个表中随机取一条数据?
order by rand() limit 1
select * from user order by rand() limit 1;
4、mysql统计函数的两种方法?
count(*)
count(id)
select count(*) from user;
select count(id) from user;
5、分组聚合怎么使用?
group by class字段
按照班级的字段进行分组‘
在分组的情况下,聚合是聚合的分组的数据
统计每个班的总人数:mysql> select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;
user表数据:
+----+----------+----------+-------+| id | username | password | class |+----+----------+----------+-------+| 1 | user1 | 123 | 1 || 2 | user2 | 123 | 1 || 3 | user3 | 123 | 1 || 4 | user4 | 123 | 2 || 5 | user5 | 123 | 1 || 6 | user6 | 123 | 3 || 7 | user7 | 123 | 2 || 8 | user8 | 123 | 1 || 9 | user9 | 123 | 3 || 10 | user10 | 123 | 1 |+----+----------+----------+-------+group by分组聚合的使用:#按条件进行分组,然后在分组的基础上进行有条件的聚合.把每个班的第一个人取出来:mysql> select * from user group by class;+----+----------+----------+-------+| id | username | password | class |+----+----------+----------+-------+| 1 | user1 | 123 | 1 || 4 | user4 | 123 | 2 || 6 | user6 | 123 | 3 |+----+----------+----------+-------+统计每个班的总人数:mysql> select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;+--------+--------+| 班级 | 人数 |+--------+--------+| 1 班 | 6 人 || 2 班 | 2 人 || 3 班 | 2 人 |+--------+--------+
6、统计每个班的总人数?
count(*)
group by class
select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;
+--------+--------+| 班级 | 人数 |+--------+--------+| 1 班 | 6 人 || 2 班 | 2 人 || 3 班 | 2 人 |+--------+--------+
二、内容在总结中
随机数rand函数:
select * from user order by rand() limit 1;统计个数count函数:#统计表总行数:select count(*) from user;select count(id) from user;#统计符合条件的行数:select count(*) from user where id>2;求和sum():select sum(id) from user;平均值avg():select avg(id) from user;最大值max():select max(id) from user;最小值min():select min(id) from user;user表数据:+----+----------+----------+-------+| id | username | password | class |+----+----------+----------+-------+| 1 | user1 | 123 | 1 || 2 | user2 | 123 | 1 || 3 | user3 | 123 | 1 || 4 | user4 | 123 | 2 || 5 | user5 | 123 | 1 || 6 | user6 | 123 | 3 || 7 | user7 | 123 | 2 || 8 | user8 | 123 | 1 || 9 | user9 | 123 | 3 || 10 | user10 | 123 | 1 |+----+----------+----------+-------+group by分组聚合的使用:#按条件进行分组,然后在分组的基础上进行有条件的聚合.把每个班的第一个人取出来:mysql> select * from user group by class;+----+----------+----------+-------+| id | username | password | class |+----+----------+----------+-------+| 1 | user1 | 123 | 1 || 4 | user4 | 123 | 2 || 6 | user6 | 123 | 3 |+----+----------+----------+-------+统计每个班的总人数:mysql> select concat(class,' 班') 班级,concat(count(*),' 人') 人数 from user group by class;+--------+--------+| 班级 | 人数 |+--------+--------+| 1 班 | 6 人 || 2 班 | 2 人 || 3 班 | 2 人 |+--------+--------+补充:
-----------------------------------------------分组聚合:select class,max(id),min(id),count(*),sum(id),avg(id) from user group by class;+-------+---------+---------+----------+---------+---------+| class | max(id) | min(id) | count(*) | sum(id) | avg(id) |+-------+---------+---------+----------+---------+---------+| 1 | 10 | 1 | 6 | 29 | 4.8333 || 2 | 7 | 4 | 2 | 11 | 5.5000 || 3 | 9 | 6 | 2 | 15 | 7.5000 |+-------+---------+---------+----------+---------+---------+