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