sql 条件求和_从零学会SQL:汇总分析 D3

本文详细介绍了SQL中的汇总分析,包括count、sum、avg、max、min等函数的使用,以及如何进行分组(group by)、对分组结果指定条件(having)和排序(order by)。此外,还探讨了如何理解和解决SQL运行过程中的常见错误。

2020年3月24日 星期二

大纲:

  1. 汇总分析;
  2. 分组;
  3. 对分组结果指定条件;
  4. 用sql解决业务问题;
  5. 对查询结果排序;
  6. 如何看懂报错信息。

1 汇总分析

b1da1f3dea3fefd2eea8b3b8fa69ff22.png
汇总函数

count:求某列的行数;

计算教师姓名这一列非空值的行数:select count(教师姓名) from teacher;

计算所有的行数:select count(*) from teacher;

select count(成绩) from score; 计算score表格成绩列有多少行

select count(distinct 成绩) from score; 计算score表格成绩列有多少不重复值的

f8e083ee234d361a1745d7fdf39f5dad.png
count(*)

sum:某列数值相加的总和,只能对数值类型进行计算。

select sum(成绩) from score; 对表格score的成绩一列求和;

avg:求平均值,只能对数值类型进行计算;

select avg(成绩) from score; 对表格score的成绩一列求和;均值;

max,min:最大,最小值

select max(成绩) ,min(成绩)from score;

9cd38d71f2f76f4e3845e4ec0a3bc012.png

练习:

0f4760acd415a509e280637f5c1b5abf.png
练习题

674e214ae6cbc475f61a7ca1ddb8a429.png

da91dd3d2bd6940eaf8a72a79ef002fb.png

2 sql分组:group by

分组计算的原理

ebd35ef258168be620771627d0f58481.png
原理

对应的sql的语句

09fa2bb88a3e336d4a12b02a997991cb.png
sql语句

d418a19abe350aabc5510aa56070750a.png
sql运行顺序

ef269377f2f458c47fa7c30ea378c815.png
展开

Sql的运行顺序:

1.先运行蓝框里的子句

2.Select子句

dbf5972f6d4bb7c7d545a80ce981466a.png

练习:

查询各科成绩的最高和最低分

b6b3dd4994971c5171775e9e47c83e6d.png

查询每门课程被选修的学生数

8540407225f39a7e6dbff08fc2251da5.png

查询男生、女生人数

02c5d4ff81efb0a02cb4858ee702b932.png

查询每个学生的最高、最低分

ac3e80480b03fa775a4a8672dd925900.png

3 对分组结果指定条件

having 对分组的结果再加条件限制

where 指定行的条件

9507057c97b9fd08d3ac963b584ebfe5.png

Sql的运行顺序:

1.先运行蓝框里的子句

2.Select子句

57566723c1c9212485543c8ea4fdd29f.png

练习:

查询平均成绩大于60分学生的学号和平均成绩

91816c4604698d45c410f93988bf869a.png

查询至少选修两门课程的学生学号

fbfd071ade5faf9a7731e71f1fa58659.png

查询同名同姓学生名单并统计同名人数

fe6ee26b8b529142968e898dc25fe512.png

4 用sql解决业务问题

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

两个栗子:

006da3a718c9c20ac7b83863fd7a54a8.png
分析思路

43c2837bcaff95f46cb0194d523c067c.png

5f503702b55d0d91d9c921500175f8f9.png

5 对查询结果排序——order by & limit

order by

降序desc:从大到小

升序asc :从小到大

da7a2fa2d7d97d2f88ad30e2870c8e61.png

特殊情况:

指定多个列名进行排序,从左到右(sql的):即同时有多个升序asc、降序desc。

bc2a64952764aed9b0ad6f1b5caf06f2.png

空值null的排序:优先,可用于空值数据的筛除。

6d14938da15298a03704723897175e76.png

limit:从查询结果中取出指定行


练习:

62d2aeab4c044cc4fb16692dad4501cd.png

ce2726560e99efcfb079463d343e42e6.png

0d2ecf4cc8a9036a52dddf6cbe40e6ea.png

7b61ec5b3bdad2259703e567de65a2de.png

34df7f185231a60b01141c87ab60b930.png

7 如何看懂报错信息

错误1:group by中使用select中定义的别名

疑问sql是先运行group by子句,此时sql无法识别别名是什么。

5d5b9a7e05f3fe8448d740c9f7be3b30.png

错误2:在where中使用聚合函数

where中不能使用聚合函数

35ba6d22e56b381d2faea59a14ac1600.png

错误3:字符串类型的数字

为什么数据列的最大值与sql运算值不一样??

表中填充数值时,如果数值类型选择错误,再对数值进行运算,就会按数值类型进行运算

569c8e871e232073225e69c9110249fc.png

最后记住一张表:

3e708da3b03422c8d20bb89bd19118c8.png

sqlzoo练习

如果字符串有包含特殊符号

f37d08ec680670cac6b8f72b287c7e50.png

570fed8de7b3a39b0b8698e860b98939.png

3e7b14687751d3507c5f3cafd3da5cee.png
原始数据

74aa5cd2fddb08081de4dca41d385e12.png

因为题目要求这两个科目排在后面,所以引入subject in ('Physics','Chemistry'),subject in ('Physics','Chemistry')返回值(0或者1),会对每一个subject做一个if的判断,有的是1,没有的是0,再用order by把这些值排序在下面。0排在前面,1排在后面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值