sql count为空时显示0_中级数据分析-SQL汇总分析

一、汇总分析

8caf0a435ae8d975d48da721d13823cc.png

注意,sum和avg函数都只能对数值类型的列计算

count函数应用注意:

352fb15c2aab676f2bcac118dea20e79.png

count函数输入的如果是列名,得到的结果,是除掉空值Null之后的结果。

如果count函数,输入的是*,则代表全部的行,包括空值。

ccf2feb7d243a3ec41de9d775cc2f0d1.png

二、分组

sql分组:group by

73779fcc3bac86cfd882089053811e84.png

三、对分组指定条件

7911b13ce3bc4d94ae0d9a89e248fb79.png
  • 练习1:查询平均成绩大于60分学生的学号和平均成绩

c6ead5cc41656721c067648b373bae3c.png
  • 练习2:查询至少选修两门课程的学生学号

d3d91e7addb6011fad0e9653db0513ba.png
  • 练习3: 查询同名同姓学生名单并统计同名人数

翻译成大白话,问题解析:查找出姓名相同的学生有谁,每个姓名相同学生的人数

7bc9525097400dc2cfc2a2f84bbf28cb.png

四、用sql解决业务问题

  • 翻译成大白话
  • 写出分析思路
  • 写出对应的sql子句

练习题:计算每门课程的平均成绩,并且平均成绩大于等于80分。

解答:

de6cb934f459ef9857649353b1f3e058.png

五、对查询结果排序

order by

order by desc: 从大到小

order by asc: 从小到大

默认是从小到大

4e401ea46952ab427d4f53dd6ff9217b.png
  • sql运行顺序:

e17cac5d68ffa5d374011dd994f4b24c.png

order by 是最后运行的

  • 指定多个排序列名时,当第一个列名里面有重复值时,再按第二个列名排序。

e8d53bd30e1255c4770b9e6fd9de2b10.png
  • 使用含有空值的列排序时,空值会在查询结果的前面显示:

03974242c6b69f390f85d5540aa1f70b.png
  • 从查询结果中取出指定行: limit

e273b96dc421754f5cbaa94ba9f5375d.png
  • sql运行顺序

04fd4a369963e20e7eda0e6adce0988f.png
  • 练习题1:查询不及格的课程并按照课程号从大到小排列

208a95cba1f602a099d494c046db5d8d.png

没有不及格的课程

  • 练习题2: 查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

9cc44ddaad29ece68e6f235d167e883f.png

六、如何看懂报错信息

注意一下几点,避免报错

  • group by 中不能使用select里的别名,因为group by 是先运行的
  • 在where中不能使用聚合函数
  • 注意字符串类型的数字

6d7e0ac6682adb0aeb660cb46a5dd36f.png

数值类型的排序和字符串是不一样的,要数据改为数字类型,再进行操作

最后练习sqlzoo的题目:

66d5d0baf4a330a621fac1ef0ff3463a.png

1566131bfcddcf086e18c3061ba13786.png

其中SELECT from nobel中有两道题目值得关注一下:

29ff2302853cb90b571933b6ba07aeac.png
  • 题目1:

eec800884f41643170a250735983fdad.png

【问】如果字符串中包含单引号或双引号,该怎么处理?比如EUGENE O'NEILL?

答:使用sql的转义字符。在EUGENE O'NEILL中的单引号('), 使用两个单引号('')表示在字符串里面的单引号,也就是转义字符。

  • 题目2:

查找1984年获奖者和主题,按主题和获奖者名称排序,其中主题 Chemistry 和 Physics要排在最后面

dc33f1f12f07a02d6a60469dc81e48cc.png

结果如下:

d12b17adfa306455f11997e14ff9278c.png

sql解释:

subject in('Physics','Chemistry')的返回值是1或者0,subject in会判断,如果满足括号里的条件,也就是有括号里的值,返回1,否则返回0。

默认排序是从小到大,所以,满足条件,返回值是1,所以排在了最下面

如果要求,chemistry 和 physics在顶部:

858b10d6d6a46a6c63886959801dc83b.png

因为返回值是1,默认是ASC排序,改成DESC排序,则就到了顶部

结果:

22e3e354a3288fa262e140d58e9aa35f.png

具体解释还可参考下方链接:

mysql order by if()或order by in()条件排序​blog.csdn.net
6eddaa3a17daa4b66cab578fadbd074a.png
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值