列名无效如何解决_如何用SQL做汇总分析

文章结构

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

一.汇总分析

聚集函数:聚集函数会对NULL以外的对象进行汇总。但是只有COUNT函数例外,使用COUNT(*)可以查出包含NULL在内的全部数据的行数[输入的是列名的时候NULL不统计],注意:其他函数并不能将星号作为参数。

COUNT: COUNT() 函数返回符合指定条件的行数

SQL COUNT() 函数_w3cschool​www.w3cschool.cn
fea26ccee806d4fcb71091545da8eaeb.png

8fa00c5717e13373f1f8b63ccafe9a0b.png

1.查询某列的行数[NULL不计数],count输入参数为列名。

34a30393445b49bfc0d00d024e7d0222.png
表-teacher

278eec94af7e6725e28803892146425d.png

2.查询所有记录数(行数)

ba015e7f5858f66b17bc60cd047e8729.png

SUM函数:函数返回数字列的总和。

实例1:求学号为'0001'的学生的课程总成绩。

0640f49947df966d246d7c2654c05af2.png
表-score

1f431594bf948b238a77c3034fa65b65.png

AVG函数:函数返回数字列的平均值。

实例1:求学号为'0001'的学生的课程平均成绩。

01da952055a1034b7a9096da4df29f3e.png

MAX/MIN函数函数返回所选列的最大值/最小值。

实例1:求课程号为'0002'的课程最高分和最低分。

8320d4d0dff6580f3729fb998318d847.png

注意:聚集函数,如果以列名为参数,那么在计算之前就已经把NULL 排除在外了。因此,无论有多少个 NULL 都会被无视,被无视和等于0是不同的,具体自己体会AVG函数中二者的区别。

函数小练习:

1.查询课程编号为'0002'的总成绩.

ac64ab2518f8946d81d39420c37d8e0d.png

2.查询选了课程的学生人数.

d03268e56777861c83dfb4e03e4364df.png

二.分组

GROUP BY:主要是用来通过对某个字段进行分组查询,使用 GROUP BY 子句时,会将表中的数据分为多个组分别进行处理。

4eae68beee4f0ca06c50448b21209c9f.png

a6c688691cc1bab724f98ac231b2f24a.png

937792964b81717cd428f58545ed4327.png

d0d8dcf5c043f4e1e22cecf3025097e8.png

注意:因为聚合函数通过作用于一组数据而只返回一个单个值,因此,在SELECT语句中出现的元素要么为一个聚合函数,要么为GROUP BY语句的参数,要么为一个常数否则会出错。

287b14c77f8097e97606c0f92fcba971.png

select子句后面接无论是列名,还是其他聚合函数,都要做到每行输出的元素做到一一对应。因为按continent分组之后再组合后的结果,每个continent都只有一个值,但是一个continent肯定不止一个country,所以会出一对多的情况【一对多的数据往往需要分组】,于是会报错,GROUP BY后的数据,应该是搭配聚集函数使用,才能一对一(聚集函数只有一个返回值)。【mysql不会报错】

分组练习题:

1.查询各科成绩最高和最对分。

7256b76d2459e855c102e15b3d8c1269.png
表-score

5d623f1ffc084a9afe34bd9c1474d8f1.png

2.查询每门课程选修的学生数量。

eb0c7e5be724c687319166407c68b4d8.png

3.查询男生人数,女生人数。

0d8579525e6ef817d68e3c95c76b7042.png
表-student

b18139e4bc5ba5d4616f1f5525bd8f44.png

3.查询选择了课程'0002'男生人数,女生人数。

561de6e6d0155e8baa050c86bfb0fcd8.png

85163ed71f810eaef5b2771d323057f2.png

三.对分组结果指定条件[HAVING]。

HAVING通常是对GROUP BY后的数据进行筛选的[基本上都和聚集函数搭配使用]。

aa2d814b030e1ed44dd21939bb236385.png

9da109108d836093418efbbee3f90609.png

补充资料:

(1)聚函数:诸如(COUNT,MAX,MIN,SUM,AVG)等基于整列数据进行计算的返回单一值的函数。

(1)HAVING是先分组再筛选记录,WHERE在聚合前先筛选记录.也就是说作用在GROUP BY 子句和HAVING子句前;而 HAVING子句在聚合后对组记录进行筛选。

07f9e835f63796337bb15e29b1eaf330.png

(2)具体来说:聚集函数也叫列函数,它们都是基于整列数据进行计算的,而WHERE子句则是对数据行进行过滤的。聚集函数要对全列数据进行计算,因而使用它的前提是:结果集已经确定!而WHERE子句还处于“确定”结果集的过程中,因而不能使用聚集函数。与WHERE子句不能出现聚集函数正相反的是,我们几乎看不到不使用聚集函数的HAVING子句。为什么?因为在水平方向上根据外部指定条件的筛选(也就是对行的筛选),WHERE子句可以独立完成,剩下的往往都是需要根据结果集自身的统计数据进一步筛选了,这时,几乎都需要通过HAVING子句配合聚集函数来完成。其次,WHERE子句运行效率比HAVING子句也要快。

(3)使用 COUNT 函数等对表中的数据进行聚合操作时,DBMS 内部就会进行排序处理。排序处理是会大大增加机器负担的高负荷的处理 。通过 WHERE 子句指定条件时,由于排序之前就对数据进行了过滤,因此能够减少排序的数据量。但 HAVING 子句是在排序之后才对数据进行分组的,因此与在 WHERE 子句中指定条件比起来,需要排序的数据量就会多得多。

转自:

CSDN-专业IT技术社区-登录​blog.csdn.net

练习题:

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

7856a6a41f2fa73861e5cc31c10e871a.png

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

fb9aa4b01142d7e41aec4cf4d97dc448.png

3.查询同名同姓的学生名单并统计同名人数。

625c48952242118a5e7a72b5e9fcc388.png

四.用SQL解决业务问题

[磨刀不误砍柴工]

  1. 翻译成大白话
  2. 写出分析思路
  3. 写出对应的SQL语句

46ea70bf377b01d65e927790b28d365c.png

五.对查询结果进行排序

  • ORDER BY在SELECT语句之后运行.
  • ORDER BY子句中可以使用SELECT子句中定义的列的别名。
  • ORDER BY子句中可以使用SELECT子句中未出现的列或者聚合函数。
  • ORDER BY子句中如果同时指定多个排序键。规则是优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的键。

688770d5550f7eea5b5a36fe3ddf5e70.png

图片出自:

SQL ORDER BY 关键字​www.w3cschool.cn
fea26ccee806d4fcb71091545da8eaeb.png

排序应用:查看空值情况。

282fe715a70cd5af77c39912e1e411e9.png

limit:从查询结果中取出指定行,一般来说,limit是对查询结果做限定,一般是最后运行。

2f467c3920982ed2983dda21bdcc31b9.png

练习题:

1.查询不及格的课程并且按照课程号从大到小排列。

16c8c623447ae70f0b4c621e65a67742.png

2.查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同的时候,按照课程号降序排列。

aee8cac9796c784b684c3848c21f6d25.png

3.查询两门以上不及格课程的同学的学号及不及格课程的平均成绩。

a1080c4f5aa5642c4909126d90ec7b39.png
我们可以发现:如果存在限制条件,它限制的主体,通常来说是要输出内容的主体之一。

补充:Sql语句运行顺序

37023ea4922a6a13a180fbaf69b0fc46.png

六.如何看懂sql报错信息。

1.在GROUP BY 中使用了 SELECT里别名,SELECT 子句在 GROUP BY 子句之后执行。在执行 GROUP BY 子句时, SELECT 子句中定义的别名, DBMS 还并不知道。

2.在SELECT子句中书写了多余的列,在使用 COUNT 这样的聚合函数时, SELECT 子句中的元素有严格的限制。 使用聚合函数时,SELECT 子句中只能存在以下三种元素。

e22c51e27a2d0a2244ea83dc537f58bc.png

3.在WHERE中使用聚合函数。

4.HAVING 子句和包含 GROUP BY 子句时的 SELECT 子句一样,能够使用的要素有一定的限制,限制内容也是完全相同的。 HAVING 子句中能够使用的 3 种要素如下所示。

615926fb8c8c66ba6b1489779bb89f5f.png

如:①HAVING COUNT(*)= 2 这样的条件,其中 COUNT(*)是聚合函数, 2 是常数,全都满足上述要求。②或者后面接的时GROUP BY子句中的列名。

七.Sqlzoo练习

select from nobel:

4b4bcba9bdf0b89fa87c34c337263c24.png

39947bd816e1d16a6aad7255bf3ddb79.png

b00e646ab08c4cec95efd12bfe19811a.png

6084ed499584ade2a3263df6aa2b1ca4.png

31d88364dbfe89c863a3977aa3a14a5d.png

21a50e4825de5b4f89aa453c54749a0a.png

5997c7a8df52ceb13c32068f0e789d50.png

687bd8020128c06547477d4200a702be.png

bdde05822f45bba2877cc13b4ef4c36e.png

2aa20e52e52bdeca925247056b15fdea.png

15f99adc32bc82ec1798abef746c46b8.png

SUM and COUNT:

8940e6296aa1f7ced8d4ae9e7bb94709.png

1f38e79ba63ae8aaf5ab21bd2b8cb5b8.png

49981d06b59fa06ed4963e23d4dceb84.png

92889d5a99f2f61b49001c8ea7155237.png

d465d8b5ba44a7001af8ce49f3f206d2.png

aa2d814b030e1ed44dd21939bb236385.png
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值