第五章 数据的分组和排序

前面的SQL中知道了如何查询数据,对数据进行过滤,这相当于如何在仓库中取到自己想要的数据。同时在仓库的管理中,对数据进行分类整理也是很常见的事,如仓库里有一堆的气球,有时需要按照颜色分类,红的一类,蓝的一类等等,有时需要按照气球的大小进行分类,如大的是一类,中等的是一类,小的是一类。对数据进行分组,把字段相同的数值放在一起能够反应数据的共同特性,数据的分组分类在数据挖掘中是很重要的一个工作。SQL语法中也提供了对数据分组的方法。

数据的分组

在SQL中,分组的关键字也很形象为 group bygroup by 后面跟着字段的名称,比如对某一字段进行分组, 如想分析学生所处的年龄段,所有学生的年龄分布在哪些区间:

SELECT age FROM `students` GROUP BY age

得到如下的结果:

从结果中可以知道学生分布在20岁到23岁之间,这是比较正常的一个班级,所有的学生年纪都不会差别太大。

如果还想知道每个分类下的个数,可以通过聚类函数 count,计算各个分类下的数目总和。

SELECT age,COUNT(age) FROM `students` GROUP BY age

结果如下:

表示在所有的学生中有2个20岁的,有2个23岁的,21岁,22岁的各一个。

同时也可以对两个字段进行分组,分组的语法为 group by 字段1,字段2

分组过滤

对分组的结果进行过滤,之前过滤的方法用的是 where,但 where 没办法对分组的结果进行过滤,分组的过滤的关键字为having ,过滤学生岁数分组中,其中组里的人数为2个。

SELECT age,COUNT(age) FROM `students` GROUP BY age HAVING(COUNT(age) = 2)

结果如下:

刚好是我们上面结果的子集,20岁和23岁符合这个过滤条件,也就是这个班级里其中20岁和23岁都有2个人。

数据的排序

身高从高到低,分数从高到低,有序的数据更容易看出数据的特征来,SQL在对数据进行排序使用的关键字为 ordey by 字段,表示按照某个字段进行排序。desc 表示降序,asc 表示升序(默认)。

对学生按照年龄进行排序:

SELECT * FROM `students` ORDER BY age  desc

排序的结果如下:

如果排序的时候,字段是一样的数值如何排序呢,比如id为4,6的同学都是23岁,那谁放在前面呢?默认的话是根据id来排序,如果想进一步的排序,同样可以再加一个字段,

SELECT * FROM `students` ORDER BY age  desc,id desc 

如下:

可以知道多个字段的排序下,相同年纪的学生按照id降序排序。

SQL语法总结

在这里SQL比较重要的关键字都已经讲解过,从数据的选择 select ,数据的过滤 where ,数据分组 group by ,数据的排序order by

通常组成SQL的语法顺序如下:

子  句 说  明 是否必须使用
SELECT 要返回的列或表达式
FROM 从中检索数据的表 仅在从表选择数据时使用
WHERE 行级过滤
GROUP BY 分组说明 仅在按组计算聚集时使用
HAVING 组级过滤
ORDER BY 输出排序顺序

SQL数据选择的语法来说相当的简洁,关键字不会太多,几个独有的关键字,组合成一条看起来像英文的语句。就可以进行数据分析了。


所有评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。

还没有评论

撰写评论