SQL入门:第四章 数据的分组和排序

前面的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

排序的结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W96gDKzH-1649725949479)(/images/kuxue/sql-start/mysqlorder1.png)]

如果排序的时候,字段是一样的数值如何排序呢,比如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数据选择的语法来说相当的简洁,关键字不会太多,几个独有的关键字,组合成一条看起来像英文的语句。就可以进行数据分析了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值