![7db1a82786d9cac2694b38663c352492.png](https://i-blog.csdnimg.cn/blog_migrate/9ab6813a8c9ce9f4972b994f5ef2ad86.jpeg)
1、汇总函数
常见的汇总函数有以下5个:
COUNT 求某列的行数、SUM 对某列数据求和、AVG 求某列数据的平均值
MAX 求某列数据的最大值、MIN 求某列数据的最小值
1)对于COUNT函数,计数时是会忽略空值的,即图中红框那一行是不会被计入行数的
![3d730c5577a47613870f5638ca588077.png](https://i-blog.csdnimg.cn/blog_migrate/b578f9b92add96ecbb0ee75a9eda423e.jpeg)
如果输入
SELECT COUNT(教师姓名)
FROM teacher;
就会得到下面结果:
![3684d3ec6143635185e64e6219595633.png](https://i-blog.csdnimg.cn/blog_migrate/dc56f161da07f791308c1ed7c8d46de6.jpeg)
如果想对整个列计算行数,则使用下面的语句即可:
SELECT COUNT(*)
FROM teacher;
2)SUM和AVG的使用规则是类似的,都只能对数值类型的数据进行计算。如图
![d12a7876d7fe0110bbe4b524674acc11.png](https://i-blog.csdnimg.cn/blog_migrate/16c8cfee8e7ab5db75e9b7057a91c8d0.jpeg)
![a697c8979613128b46dad55bd4b9425b.png](https://i-blog.csdnimg.cn/blog_migrate/14956f4386b70f6ffe3ae634b233e38d.jpeg)
3)MAX和MIN函数则可以对任意类型数据进行计算,得出某一列的最大值和最小值:
![5c49c82bd4eae836be45f6c906896714.png](https://i-blog.csdnimg.cn/blog_migrate/a95fee4dd713891957c4ae091d0ca6ce.jpeg)
tips:可以在聚合函数中插入DISTINCT进行去重,位置是在列名之前,例子如下
![c98b8adc2ba2adb4b279ed45740306b5.png](https://i-blog.csdnimg.cn/blog_migrate/8a09a7ee67b5fb2015ff2a3a9daa19b3.jpeg)
![2d96f13730d48bb47e0b87ddd8bea8d0.png](https://i-blog.csdnimg.cn/blog_migrate/57ae069433d51a2dc4292b3a6a403f9a.jpeg)
这里强调一下书写规则:一定记住列名不得使用空格。在书写子句时,列名不需要加单引号,因为列名不是字符串。
练习题:
1)查询课程编号为0002的总成绩
SELECT 课程号, SUM(成绩) AS 总成绩
FROM score
WHERE 课程号 = '0002';
2)查询选了课程的学生人数(注意去重)
SELECT COUNT(DISTINCT 学号) AS 学生人数
FROM score;
2、分组
分组需要使用子句GROUP BY,例如
SELECT 性别,COUNT(*)
FROM student
WHERE 出生日期>'1990-01-01'
GROUP BY 性别;
注意SQL的运行顺序和书写顺序是不一致的,具体到上一个例子,运行顺序为:
FROM——WHERE——GROUP BY——SELECT
练习题:
1)查询各科成绩最高和最低的分
SELECT 课程号,MAX(成绩) AS 最高分,MIN(成绩) AS 最低分
FROM score
GROUP BY 课程号;
2)查询每门课程被选修的学生数
SELECT 课程号,COUNT(学号) AS 选修人数
FROM score
GROUP BY 课程号;
3)查询男生、女生人数
SELECT 性别,COUNT(性别) AS 人数
FROM student
GROUP BY 性别;
这里用AS对选择结果进行了重命名,使结果看起来更直观。
3、对分组结果指定条件
使用HAVING子句对GROUP BY子句进行指定条件,具体运行顺序如下
![b474616223828a547db6f4630aec2927.png](https://i-blog.csdnimg.cn/blog_migrate/427d416399dd7b7af491fb9f9212e512.jpeg)
练习题
1)查询平均成绩大于60分学生的学生号和平均成绩
SELECT 学号, AVG(成绩) AS 平均成绩
FROM score
GROUP BY 学号
HAVING AVG(成绩)>60;
2)查询至少选修两门课程的学生学号
SELECT 学号,COUNT(课程号) AS 选修课数目
FROM score
GROUP BY 学号
HAVING COUNT(课程号)>=2;
3)查询同名同姓学生名单并统计同名人数
SELECT 姓名,COUNT(姓名) AS 人数
FROM student
GROUP BY 姓名
HAVING COUNT(姓名)>1;
tips:在翻译成大白话的过程中,一旦出现每个每门每人,就是提示我们要用分组的思路解决问题。
4、用SQL解决业务问题的步骤
1)翻译成大白话,越方便理解越好
2)写出分析思路,按照SQL子句的书写顺序,逐项列出来
3)根据分析思路,写出对应的SQL子句
5、对查询结果排序
使用ORDER BY子句,书写顺序为:
SELECT——FROM——WHERE——GROUP BY——HAVING——ORDER BY
运行顺序和书写顺序是不一样的,具体如下图
![cfe372dd9734cd1383773a8eb2fe436c.png](https://i-blog.csdnimg.cn/blog_migrate/c6616d5ad96374c27bc7a025183eee6e.jpeg)
所以ORDER BY里用来排序的列名,可以是SELECT子句里重命名的别名,但是为了避免混淆,不建议使用。
tips:
1)在ORDER BY子句的最后加上DESC,则为降序排列;加上ASC,则为升序排列。
2)可以在一个ORDER BY子句里同时指定多个排序列名。例如
![eeb85dbd9f8eac1fcbe8c17fed65cd9b.png](https://i-blog.csdnimg.cn/blog_migrate/2ca6305a99bb14ec861da31566721aae.jpeg)
3)如果查询的列中有空值,空值会在最前面的几行里显示。
![287535178ed16eb198ede24d56c9b8c5.png](https://i-blog.csdnimg.cn/blog_migrate/6a350731ee3c5bda1fd01b0e05b45023.jpeg)
如果数据量很大,只需要取一部分数据时,可以使用LIMIT子句限定显示的行数,例如
SELECT *
FROM score
LIMIT 2;
运行结果就是只显示前两行数据。
练习题
1)查询不及格的课程并按课程号从大到小排列
SELECT 课程号
FROM score
WHERE 成绩<60
ORDER BY 课程号 DESC;
2)查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
SELECT 课程号,AVG(成绩) AS 平均成绩
FROM score
GROUP BY 课程号
ORDER BY 平均成绩 ASC,课程号 DESC;
6、常见错误
1)在GROUP BY子句中使用了SELECT子句里的别名
改正:只能在GROUP BY子句中使用原列名,因为GROUP BY子句的执行顺序在SELECT子句前面。
2)在WHERE子句中使用了聚合函数
改正:改用HAVING子句做条件限制
3)数据类型错误,SQL查询的数字结果和原数值不一样
原因是这个数据的类型没有设置为数字型,而是字符串型,这样SQL就会按照字符串的规则进行排序或计算。改正:把数据类型修改为数字型即可。
7、SQLZOO练习
第一部分
SELECT from Nobel Tutorial/zhigs.sqlzoo.net![81592c15c45ddc8c04d08c1a3460d16d.png](https://i-blog.csdnimg.cn/blog_migrate/d6fd5a162ef10622b0ee066cd89b4d21.jpeg)
![70a885dcdfd962a5cb9b0a73df3e1473.png](https://i-blog.csdnimg.cn/blog_migrate/ffc5c8f51a6b326cfe451150c20a28e1.jpeg)
![560865e7f16b7def6db2ef1e1e779cde.png](https://i-blog.csdnimg.cn/blog_migrate/c64c4d8924634912b3e38cbe6cfdc99e.jpeg)
![d4645548a6b42bf4d03ee8a01e22711e.png](https://i-blog.csdnimg.cn/blog_migrate/5599dfaa9184800cbc63dd7e2fb27d12.jpeg)
![def24e7eebcab82017353ea2755a475b.png](https://i-blog.csdnimg.cn/blog_migrate/2a9356bee980aed92c7e2c139bb5f4eb.jpeg)
![f6e4ffc826830d240782927fa8d76be5.png](https://i-blog.csdnimg.cn/blog_migrate/31e1485d26e090120e64357766c37d5b.jpeg)
![0b719f79513722bf2bbeea533295fee9.png](https://i-blog.csdnimg.cn/blog_migrate/9e55cb68314bb1fb3bbb72a0ce6a338a.jpeg)
![d42ea02cc7084fe22a4285ea018d503c.png](https://i-blog.csdnimg.cn/blog_migrate/970b23d9ffad5cb6fe24a225f1023c1b.jpeg)
![cd29c2dfa00f6d741785312e64d50135.png](https://i-blog.csdnimg.cn/blog_migrate/df544c4ac23d8f92df6ce8687b8f8a0e.jpeg)
![70906e4b4d3fe09c910b0273d8f61b83.png](https://i-blog.csdnimg.cn/blog_migrate/56a6b9adfe1fd190164f58f008bb91b6.jpeg)
![731d13c05367796b93fc573c8cd0a00e.png](https://i-blog.csdnimg.cn/blog_migrate/9517d85cad6c5955087a22fdd810f3f6.jpeg)
![124ab5ee1630a9fe52231a013a81ea46.png](https://i-blog.csdnimg.cn/blog_migrate/915ffb4b99f749ff57762c836cabdcd2.jpeg)
![0a762681eee17f41d83132632c392f8b.png](https://i-blog.csdnimg.cn/blog_migrate/3ceb4c8e398aa97d3c54f88b61e7870b.jpeg)
![8f9f89154240b8c9c1724b4831d22267.png](https://i-blog.csdnimg.cn/blog_migrate/2cf6094b312305a56fe64f4b83b84e57.jpeg)
第二部分
SUM and COUNT/zhigs.sqlzoo.net![928cfdb9299454f7ac9557bc35a267f2.png](https://i-blog.csdnimg.cn/blog_migrate/9ae0078170c1f732c4a9a0b3b026ef08.jpeg)
![e4b8e4342b110ed83b25b599eb9ad43a.png](https://i-blog.csdnimg.cn/blog_migrate/f6f75b92cc48c6973ee59d507b35dceb.jpeg)
![dccc1189b7350d6811ebefe235ac96c6.png](https://i-blog.csdnimg.cn/blog_migrate/0d6bc6528f996613122fad27e389685f.jpeg)
![3c75340c0cf4b2ac149491cb16d0913e.png](https://i-blog.csdnimg.cn/blog_migrate/9fadb937b1629f97f8baba66e59fbbaf.jpeg)
![75d29a03099afb3b1909417d4ab1102f.png](https://i-blog.csdnimg.cn/blog_migrate/a1b5152fcb6f3f38ed0db32aa79031dd.jpeg)
![707c5cfb2fbd4e43978e33835ecc2a74.png](https://i-blog.csdnimg.cn/blog_migrate/3d21f4809592aa8115e4da9e90a603be.jpeg)
![a43986f6172c712a4bd519aaec646fac.png](https://i-blog.csdnimg.cn/blog_migrate/b9dc7e423041f8774aae14b68db1f3d2.jpeg)
![007b4fa6e0fd7b7a27ab758f4e1b58e6.png](https://i-blog.csdnimg.cn/blog_migrate/32efade537238478479d98b2e62b83e3.jpeg)