前面我们介绍了mysql数据库中的建表导表的步骤以及基础的SELECT语句,本篇再基于第一篇文章的数据基础上我们梳理下聚合和分组。
通过SQL对数据进行某种操作或计算时需要使用某种函数,如:计数count函数,求和sum函数等。
以下是5个最常用的函数:
用于汇总的函数称为聚合函数,所谓聚合,就是将多行汇总为一行,实际上,所有的聚合函数都是这样,输入多行输出一行。
例如我们将上面的第2题改一改
select count(s_id) from student where year(s_age)='1990';
运行结果如下:(这里由原来的5行记录汇总聚合成了一行)
select count(t_id) as "李"姓老师的数量 from teacher where t_name like '李%' group by t_id;
运行结果如下:(这里由原来的5行记录汇总聚合成了一行)
select count(t_id) as ‘"李"姓老师的数量’ from teacher where t_name like ‘李%’ group by t_id;
如果只使用聚合函数,则是针对表中的所有数据进行汇总处理,如果我们想把表中的数据按某种划分方式划分成几组,再看每组的汇总结果,比如我们想看一下每门课程的学生人数该怎样去处理呢?那就需要加入GROUP BY子句。
SELECT <列名>,... FROM <表名> GROUP BY <列名>,...;
下面我们来练习一下
select c_id, count(s_id) as '选修学生数' from stu_sco group by c_id;
运行结果如下:
可以看出在未使用GROUP BY子句时,结果只有一行,使用GROUP BY子句后,将表中的数据按照c_id进行了切分处理,然后返回每组的聚合结果。
select s_name, count(s_name)-1 as num from student group by s_name;
运行结果如下:
这里我们可以看数据中并没有重名的人。
这里我们思考一个问题:
那么分组和聚合的关系是什么呢?是有聚合就一定有分组呢?还是有分组就一定有聚合呢?再或者是两者必须同时出现缺一不可呢?
这里小编给出的答案是:这里并没有什么绝对的情况。
数据分析咨询请扫描二维码