一.汇总分析
- count(列名):求某列的行数,不包含空值(null);count(*)求全部的行数,包含空值(null)
- sum(列名):对某列数据求和,只能对数值类型的列计算
- avg(列名):求某列数据的平均值,只能对数值类型的列计算
- max(列名):求某列数据的最大值
- min(列名):求某列数据的最小值
- 注意
- 如果输入的是列名,在计算前会将空值Null排除在外。
- 如果在汇总时不想计算重复值,在汇总函数前面加distinct,先删除重复值在计算。
练习:
sum, avg, max, min
select sum(成绩), avg(成绩), min(成绩), max(成绩)
from score;
distinct 去除重复值
select count(distinct 姓名)
from student;
![45ff43911ca1989409f38435939c1947.png](https://i-blog.csdnimg.cn/blog_migrate/786d085560326bbaecc0c4c1e3650a03.jpeg)
练习:汇总分析
- 查询课程编号为“0002”的总成绩
- 查询选了课程的学生人数
![33d462be565e15a198af3fbdee1574dd.png](https://i-blog.csdnimg.cn/blog_migrate/92799cd11c78bf897313e96317893f88.png)
![e33daf849726b13fdc7a15106fa1cf11.png](https://i-blog.csdnimg.cn/blog_migrate/c76f44586ef1d671b4694f92928fd346.png)
二.分组 group by
加入分组后,sql执行顺序为:
- from:从哪张表中查询数据
- where:查询条件
- group by:分组
- select:查询结果
练习:
- 查询各科成绩最高和最低的分
![8f913df32c70eae18f0972d5c97f5b6a.png](https://i-blog.csdnimg.cn/blog_migrate/8a44b67ca2175290c49f444110c700fb.png)
- 查询每门课程被选修的学生数
![1c933663116f264b735ff0e0632d08ee.png](https://i-blog.csdnimg.cn/blog_migrate/ec607acc5068e59e33c7c5808ca28560.png)
- 查询男生、女生人数
![9c0703beb83f1fe75d5e62d910f72a24.png](https://i-blog.csdnimg.cn/blog_migrate/95fdbebc4a9f79ba511ecd5475990b7d.png)
三.对分组结果指定条件having
加入了having子句,我们新的sql执行顺序为:
1.from:从那张表中查询数据
2.where:查询条件
3.group by:分组
4.having:对分组结果指定查询条件
5.select:查询结果
练习:
- 查询平均成绩大于60分学生的学号和平均成绩
![4f714e6cc592849ca3900b4056ad297b.png](https://i-blog.csdnimg.cn/blog_migrate/894523747022a1ab9538b8b87d536ead.png)
- 查询至少选修两门课程的学生学号
![a336c6f4fe49cbb98f8bf34d35c2e01d.png](https://i-blog.csdnimg.cn/blog_migrate/0addafdddd049502eb582544f6912233.png)
- 查询同名同姓学生名单并统计同名人数
![33c45da2d2e5894a7df07806fc318743.png](https://i-blog.csdnimg.cn/blog_migrate/32ca20866807ae7cbbf5fe35b72288b6.png)
四.用sql解决业务问题
1.翻译成大白话
2.写出分析思路
3.写出对应的sql 子句
练习:如何计算每门课程的平均成绩,并且平均成绩大于等于80分
1.翻译问题
如题目,无需翻译
2.分析思路
select 查询结果,每门课程号、平均成绩avg(成绩)
from 从哪张表查询数据,score表
where 查询条件,无
group by 分组,以每个课程号作为分组条件
having 对分组结果指定条件,平均成绩>=80
3.写出sql
select 课程号,avg(成绩) from score
group by 课程号
having avg(成绩)>=80;
总结:
1.当我们看到关键字“每”,如每组,每个...需要用分组;
2.当我们看到关键字平均、个数,最大、最小...需要用汇总;
3.当我们看到关键字大于、小于、等于...需要用查询条件。
五.对查询结果排序order by + asc/desc
1.降序desc:从大到小
2.升序asc:从小到大,默认的排序
- 同时我们也可以指定多个排序列名 order by <列名1> asc,<列名2> desc;
- 对于含有空值(null)的列排序时,空值会在查询结果开头显示,方便查询表格中空值的情况
加入了order by子句,我们新的sql执行顺序为:
1.from:从那张表中查询数据
2.where:查询条件
3.group by:分组
4.having:对分组结果指定查询条件
5.select:查询结果
6.order by:对查询结果排序;
- limit子句
从查询结果中取出指定行,我们引入新的子句limit
加入了limit子句,我们新的sql执行顺序为:
1.from:从那张表中查询数据
2.where:查询条件
3.group by:分组
4.having:对分组结果指定查询条件
5.select:查询结果
6.order by:对查询结果排序
7.limit:从查询结果中取出指定行
练习:
1.查询不及格的课程并按照课程号从大到小排
![290d92e65ab8cabee20e68eebf6efe2c.png](https://i-blog.csdnimg.cn/blog_migrate/944d902cafd510eab8e633e42948bb4b.png)
2.查询每门课程的平均成绩,结果按平均成绩升序排列。平均成绩相同时,按课程号降序排列
![cb2a9208e2c251399e874541c59fddb3.png](https://i-blog.csdnimg.cn/blog_migrate/92b113b7443ec3c826dc912577f3c355.png)
六.如何看懂报错信息
- 常见错误1:
在group by/having中使用了select里as后的别名
因为select子句在group by/having子句之后执行,所以引用别名会报错
- 常见错误2:
在where中使用聚合函数
在where子句用汇总函数运行会报错
- 常见错误3:
字符串类型的数字
把表中要进行计算的列数据类型修改为数值之后在进行相关操作
继续sqlzoo练习(相对简单的入门难度sql,练习一下吧)
SELECT from Nobel Tutorial
SELECT from nobel
![503d8e975c298a4cfca2c27263236ec4.png](https://i-blog.csdnimg.cn/blog_migrate/d1cfc7205dc0171f242b18d08092302a.jpeg)
![e3a3ab5f13ca93c1da0ab13956ca0662.png](https://i-blog.csdnimg.cn/blog_migrate/88084661536f4b946f18c1df097c1337.png)
![70a192303890c561e02f546eb54a21a2.png](https://i-blog.csdnimg.cn/blog_migrate/1d35a8bd2661558a479f9341609bdf40.png)
![aae66561bde497f3cad611d9f66f2230.png](https://i-blog.csdnimg.cn/blog_migrate/c270d883adc9b8e00735b0ef1a26e4dd.jpeg)
![e82ff83d649782847e8fb1c81ab055d2.png](https://i-blog.csdnimg.cn/blog_migrate/db3ff56c4db909ff002d918e4a4fb3b1.jpeg)
![e09665c043d234ab2621d729d5877d2e.png](https://i-blog.csdnimg.cn/blog_migrate/2908f399777c836a404754e52eb032db.jpeg)
![7ee1af1c8659e42fefb7675e32886b50.png](https://i-blog.csdnimg.cn/blog_migrate/a12b1055fd8ba1066c3f2e776865b96e.jpeg)
![c0f7edff232014ac4c433301ef06a190.png](https://i-blog.csdnimg.cn/blog_migrate/5b75ddbf49cd36fe9275e63f2462bc2b.jpeg)
![c77e24c94467f5a905913ffe878d44a4.png](https://i-blog.csdnimg.cn/blog_migrate/12ed11a40357899422435f1276c525b0.jpeg)
![48c34b5bb69c8685d1eea43f83fbf63d.png](https://i-blog.csdnimg.cn/blog_migrate/47772dc70f0e8aa85a87c1e1f9234472.jpeg)
![a63519e997b2f02b51abe9b2e3b1e3bc.png](https://i-blog.csdnimg.cn/blog_migrate/fa48aa6c6247909f17090522ea789be6.jpeg)
![e3c14d3f7685c66d687545aa368dee2b.png](https://i-blog.csdnimg.cn/blog_migrate/76a881cd14d117dd76a51ef1ffd26034.jpeg)
![ae4a55a2a5fec4bf5bff5c037675de24.png](https://i-blog.csdnimg.cn/blog_migrate/c0ad0c866cce493949ab07e54e1aac05.jpeg)
![8f8d1597876f155a7206bc9e785c3f26.png](https://i-blog.csdnimg.cn/blog_migrate/6b38826d9eeb64d168ace1c3f995bfba.jpeg)
SELECT from nobel
![3f8a7872a646aaea119ff1ecfecbe912.png](https://i-blog.csdnimg.cn/blog_migrate/20cf8cc8ab6862c47a202f0c2f1192c6.png)
![e412f59d96f6457037cdb5e4f20aa4d7.png](https://i-blog.csdnimg.cn/blog_migrate/f5028557738d40e09ba26d65f5cc604c.jpeg)
![f3f55eac13b6b547d3170dd152972b04.png](https://i-blog.csdnimg.cn/blog_migrate/fbcbc7f0e31214ea25ffc227247f425f.png)
![00f0d3dcf752429eee29a46455513fde.png](https://i-blog.csdnimg.cn/blog_migrate/cbef8bb2a1a9c43ea4a86858d58adb5c.png)
![c0f8b13f53744b99d1dca0da08f1fb27.png](https://i-blog.csdnimg.cn/blog_migrate/d7c23d06353c5433f27c6ea15382b4de.png)
![31a3e7eb9780586afc5b3435d555f94b.png](https://i-blog.csdnimg.cn/blog_migrate/b9c92e6984e64a937955466a1fd98777.jpeg)
![d110f5a34a1b5aa4660d230e397aabfb.png](https://i-blog.csdnimg.cn/blog_migrate/f9f5d2cd85d8dbebae6c0169fec52bbe.jpeg)
![f7054eb89e542a9a071c968b10bfe617.png](https://i-blog.csdnimg.cn/blog_migrate/dd91e9101345fa003c4ebb2e878670e1.jpeg)