一、汇总分析
![8caf0a435ae8d975d48da721d13823cc.png](https://img-blog.csdnimg.cn/img_convert/8caf0a435ae8d975d48da721d13823cc.png)
注意,sum和avg函数都只能对数值类型的列计算
count函数应用注意:
![352fb15c2aab676f2bcac118dea20e79.png](https://img-blog.csdnimg.cn/img_convert/352fb15c2aab676f2bcac118dea20e79.png)
count函数输入的如果是列名,得到的结果,是除掉空值Null之后的结果。
如果count函数,输入的是*,则代表全部的行,包括空值。
![ccf2feb7d243a3ec41de9d775cc2f0d1.png](https://img-blog.csdnimg.cn/img_convert/ccf2feb7d243a3ec41de9d775cc2f0d1.png)
二、分组
sql分组:group by
![73779fcc3bac86cfd882089053811e84.png](https://img-blog.csdnimg.cn/img_convert/73779fcc3bac86cfd882089053811e84.png)
三、对分组指定条件
![7911b13ce3bc4d94ae0d9a89e248fb79.png](https://img-blog.csdnimg.cn/img_convert/7911b13ce3bc4d94ae0d9a89e248fb79.png)
- 练习1:查询平均成绩大于60分学生的学号和平均成绩
![c6ead5cc41656721c067648b373bae3c.png](https://img-blog.csdnimg.cn/img_convert/c6ead5cc41656721c067648b373bae3c.png)
- 练习2:查询至少选修两门课程的学生学号
![d3d91e7addb6011fad0e9653db0513ba.png](https://img-blog.csdnimg.cn/img_convert/d3d91e7addb6011fad0e9653db0513ba.png)
- 练习3: 查询同名同姓学生名单并统计同名人数
翻译成大白话,问题解析:查找出姓名相同的学生有谁,每个姓名相同学生的人数
![7bc9525097400dc2cfc2a2f84bbf28cb.png](https://img-blog.csdnimg.cn/img_convert/7bc9525097400dc2cfc2a2f84bbf28cb.png)
四、用sql解决业务问题
- 翻译成大白话
- 写出分析思路
- 写出对应的sql子句
练习题:计算每门课程的平均成绩,并且平均成绩大于等于80分。
解答:
![de6cb934f459ef9857649353b1f3e058.png](https://img-blog.csdnimg.cn/img_convert/de6cb934f459ef9857649353b1f3e058.png)
五、对查询结果排序
order by
order by desc: 从大到小
order by asc: 从小到大
默认是从小到大
![4e401ea46952ab427d4f53dd6ff9217b.png](https://img-blog.csdnimg.cn/img_convert/4e401ea46952ab427d4f53dd6ff9217b.png)
- sql运行顺序:
![e17cac5d68ffa5d374011dd994f4b24c.png](https://img-blog.csdnimg.cn/img_convert/e17cac5d68ffa5d374011dd994f4b24c.png)
order by 是最后运行的
- 指定多个排序列名时,当第一个列名里面有重复值时,再按第二个列名排序。
![e8d53bd30e1255c4770b9e6fd9de2b10.png](https://img-blog.csdnimg.cn/img_convert/e8d53bd30e1255c4770b9e6fd9de2b10.png)
- 使用含有空值的列排序时,空值会在查询结果的前面显示:
![03974242c6b69f390f85d5540aa1f70b.png](https://img-blog.csdnimg.cn/img_convert/03974242c6b69f390f85d5540aa1f70b.png)
- 从查询结果中取出指定行: limit
![e273b96dc421754f5cbaa94ba9f5375d.png](https://img-blog.csdnimg.cn/img_convert/e273b96dc421754f5cbaa94ba9f5375d.png)
- sql运行顺序
![04fd4a369963e20e7eda0e6adce0988f.png](https://img-blog.csdnimg.cn/img_convert/04fd4a369963e20e7eda0e6adce0988f.png)
- 练习题1:查询不及格的课程并按照课程号从大到小排列
![208a95cba1f602a099d494c046db5d8d.png](https://img-blog.csdnimg.cn/img_convert/208a95cba1f602a099d494c046db5d8d.png)
没有不及格的课程
- 练习题2: 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列
![9cc44ddaad29ece68e6f235d167e883f.png](https://img-blog.csdnimg.cn/img_convert/9cc44ddaad29ece68e6f235d167e883f.png)
六、如何看懂报错信息
注意一下几点,避免报错
- group by 中不能使用select里的别名,因为group by 是先运行的
- 在where中不能使用聚合函数
- 注意字符串类型的数字
![6d7e0ac6682adb0aeb660cb46a5dd36f.png](https://img-blog.csdnimg.cn/img_convert/6d7e0ac6682adb0aeb660cb46a5dd36f.png)
数值类型的排序和字符串是不一样的,要数据改为数字类型,再进行操作
最后练习sqlzoo的题目:
![66d5d0baf4a330a621fac1ef0ff3463a.png](https://img-blog.csdnimg.cn/img_convert/66d5d0baf4a330a621fac1ef0ff3463a.png)
![1566131bfcddcf086e18c3061ba13786.png](https://img-blog.csdnimg.cn/img_convert/1566131bfcddcf086e18c3061ba13786.png)
其中SELECT from nobel中有两道题目值得关注一下:
![29ff2302853cb90b571933b6ba07aeac.png](https://img-blog.csdnimg.cn/img_convert/29ff2302853cb90b571933b6ba07aeac.png)
- 题目1:
![eec800884f41643170a250735983fdad.png](https://img-blog.csdnimg.cn/img_convert/eec800884f41643170a250735983fdad.png)
【问】如果字符串中包含单引号或双引号,该怎么处理?比如EUGENE O'NEILL?
答:使用sql的转义字符。在EUGENE O'NEILL中的单引号('), 使用两个单引号('')表示在字符串里面的单引号,也就是转义字符。
- 题目2:
查找1984年获奖者和主题,按主题和获奖者名称排序,其中主题 Chemistry 和 Physics要排在最后面
![dc33f1f12f07a02d6a60469dc81e48cc.png](https://img-blog.csdnimg.cn/img_convert/dc33f1f12f07a02d6a60469dc81e48cc.png)
结果如下:
![d12b17adfa306455f11997e14ff9278c.png](https://img-blog.csdnimg.cn/img_convert/d12b17adfa306455f11997e14ff9278c.png)
sql解释:
subject in('Physics','Chemistry')的返回值是1或者0,subject in会判断,如果满足括号里的条件,也就是有括号里的值,返回1,否则返回0。
默认排序是从小到大,所以,满足条件,返回值是1,所以排在了最下面
如果要求,chemistry 和 physics在顶部:
![858b10d6d6a46a6c63886959801dc83b.png](https://img-blog.csdnimg.cn/img_convert/858b10d6d6a46a6c63886959801dc83b.png)
因为返回值是1,默认是ASC排序,改成DESC排序,则就到了顶部
结果:
![22e3e354a3288fa262e140d58e9aa35f.png](https://img-blog.csdnimg.cn/img_convert/22e3e354a3288fa262e140d58e9aa35f.png)
具体解释还可参考下方链接:
mysql order by if()或order by in()条件排序blog.csdn.net![6eddaa3a17daa4b66cab578fadbd074a.png](https://img-blog.csdnimg.cn/img_convert/6eddaa3a17daa4b66cab578fadbd074a.png)