sql limit不接具体数字_SQL系列文章(三):汇总分析

你好,我正在学习SQL,通过写文章的方式整理和输出所学,这是第三篇,主题是汇总分析。

文章分为四个部分:汇总函数、分组、用SQL解决简单问题、对查询结果的处理

3272a259936526ec3393f907554e6c0f.png
这是我用navicat创建的学生成绩表,导出为excel格式,后面分析会用到。

汇总函数

汇总函数主要有五个:

abac40853cb74457296e3656ff710872.png

我演示一下count(),count()函数经常与关键字distinct一起使用,以去除重复值。

5eb9b656145a0f993ffe9fcecea24aea.png

分组

用于分组的语句是group by 和 having,前者是对经过 where 语句筛选出来的行进行分组,后者是对分组结果进行筛选。

先来看group by,它的语法规则是这样的:

07abeb142d4ab5a51f4cbdc06eac5368.png

它以列名作为分组依据,比如以性别作为分组依据来统计男性学生和女性学生的人数:

8eb89d4bbf48391995cb6d2ae7ff0d47.png

也可以用两个或以上的列名来分组

e86b8462b7672e6d7f71a1055e962435.png

这样讲还是很抽象,我从别处借来了两张图,它们很清楚地展示了各个语句执行的过程:

ac84f164509620cb8584aefb95595e93.png
引用自“猴子数据分析”

c00ea59b04bb7dd66b2bb3b565f319b2.png
引用自“猴子数据分析”

再看 having

它的语法规则是这样的:

640be42e6a877d08abeedb92724f3857.png

这里所说的条件是指对分组结果进行筛选的条件。比如,接着上一个例子,条件可以是选课数量大于2:

fa084023be820427acd4b27808bc9060.png

有一个点有必要展开说一下,就是上面这个例子中各个语句的运行顺序:

a4747218bc03f85f25887810caf50165.png

蓝框中的语句其实都是在筛选行或整理行,之后 select 语句就会对筛选出来的行进行处理,得到想要的结果。

用SQL解决简单问题

这个过程分为三步。第一步,明确问题,拆解问题;第二步,将问题的各个元素放到查询语句中;第三步,写出查询语句。

我用一个例子来说明。问题:查询选课超过两门的学生的学号、姓名以及选课数量。

第一步,明确问题,拆解问题。我按照“想要的结果”和“限制条件”两个纬度来拆解,具体到这个例子就是:

989a9304b2c48aa377e836bdebd8af87.png

第二步,将问题的各个元素放到查询语句中。

737a5293a3b024137b95b1c01bf41457.png

第三步,写出查询语句。

f21039eab8196dcb34e7a23b79a57bd2.png

这样做看起来挺繁琐的,对吧?我也觉得,不过它有个很大的好处:我掌握了一个套路,这样无论遇到复杂的问题就通过这种套路来处理,而不需要靠灵感或者苦思冥想,这样可以保证我有稳定的产出。相比这个好处,这点麻烦实在不算什么。

对查询结果进行处理

运行 select 语句得到查询结果之后,还可以对查询结果做进一步处理,比如排序和选取指定数量的行。前者使用 order by 语句,后者使用 limit 语句。

order by 语句的语法规则是这样的:

a84e22e30356e5a967c6f28c50208201.png
asc--升序,desc--降序,/表示或者

比如,我对上个例子中的选课数量按升序进行排列:

73289528df2c686a520d361ca7793877.png

选课数量相同的学生有不少,还可以对选课数量相同的行进行降序排序

61b405310118dbc83ba3d93d06d7381d.png

limit 的语法规则是这样的:

6ef0f02e93792b4dd4ace64550439d18.png
只返回前n行数据

d25a3b8fe0ff84f875378450c11209fa.png

最后,借用一张图进行总结:

238533df2e99fe2971efec0a2023b81c.png
引用自“猴子数据分析”

感谢阅读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值