sql 降序_从零学会SQL:汇总分析(实操演示)

8009fd722d1790f9a895a75bf062dd76.png

93583e2540b582b42e573670a1021e24.png
源数据表(student)

4f44d878110bd8ffeab93d31bc381bf2.png
源数据表(score)

练习1:汇总分析

5大汇总函数:count、sum、avg、max、min

1)查询课程编号为“0002”的总成绩

7f7c941bb50fd9f88a8725e6f5ce06af.png

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

e6b70bf5ba7ce3d8925b608f08ff3d1b.png
利用distinct把重复的学号去掉。

练习2:常见面试题

对数据分组

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

a6a9c787d9cb3965f92f868f4cc210c0.png

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

123b55cc0fecd617147e73f9bfc07c93.png

3)查询男生、女生人数

2c7369f286eb22533b3cfdfd36a41f79.png

练习3:常见面试题

对分组结果指定条件;理解SQL运行顺序

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

c6f247165fb630b985bc843229319e0b.png
后面having子句,不建议用select子句中的别名“平均成绩”,因为其他数据库可能识别不出来。(having子句先于select子句运行)

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

a3ed135122898435f0bf33383006174c.png

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

52cb8b5f9b94cdf9cfa4397fb2ccc353.png

练习4:每门课程的平均成绩

业务问题套路

1)如何计算各科平均成绩

19717fec348e1b2f6005bf14ce4e1825.png

2)如何计算每门课程平均成绩并且平均成绩大于等于80分

cf4d2b2c9d0c47f712ce860ee39c5263.png

练习5:常见面试题

对查询结果排序:升序、降序、指定多个排序列名、空值的排序

1)查询不及格的课程并按课程号从大到小排列

b0cf5497e24729eb8a1d5a030b477c02.png
因为同一门课,有多人对应不同的成绩,此题不用对课程号分组(group by)。

404a1b92c0b2be7ac23208e4c781c814.png
对比上面两图,发现用where或者having子句都可以。

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

02de1537356a2ced8714bccb06e39544.png
asc:升序;desc:降序。

3)检索课程编号为“0002”且分数小于85的学生学号,结果按按分数降序排列

3c0c6de1df67fc1c146191ff39c8b943.png
解法 1

1ae12f721ad30dc82af0e510c6f540f8.png
解法 2

4)统计每门课程的学生选修人数(超过2人的课程才统计)

要求输出课程号和选修人数,查询结果按人数降序排序,若人数相同,按课程号升序排序

deaa125515964dbf5d2090cc4e983e9d.png

5)查询两门及两门以上不及格课程的同学的学号及不及格课程的平均成绩

449cbe3c09a0761b2953f2e1428ae443.png
源数据表

a0048ca39f663cd8e19fe3a53e164ade.png
注意:输出结果是“不及格”成绩的平均成绩。

练习6:SQL练习题

几种常见的SQL错误

1)常见错误:在having子句中使用了select里的别名

因为having子句先于select子句运行,所以会导致运行的开始识别不了“别名”

b9532d633ae1dacc3212108e958d760a.png

7d5d0ca15f969cd7e9b8abb2758700ce.png
实操错例,运行结果没有报错

Tips:按理说,既然having子句是先于select子句运行的,是无法识别出having子句中的“平均成绩”(别名)的。

课程里讲的是适合所有数据库的原理,对应到不同的数据库会有差别。

2)常见错误:在where中使用汇总函数

af3855c582e93484d0c3505462d1444b.png
5大 汇总函数:count、sum、avg、max、min,不能在where中使用,可用在 having者select子句中。

3)常见问题:字符串类型的数字

3a09d83043f5c84f061f2387a701fb58.png
表面是数字,实则是“字符串”类型。数字类型和字符串类型的排序规则是不一样的。

sqlzoo 练习题

70f4f66effc5f76f07a623605f7810ac.png

sqlzoo

SQLZOO​sqlzoo.net

一、sqlzoo平台Select_from_Nobel(简单查询)

网址: https:// sqlzoo.net/wiki/SELECT_ from_Nobel_Tutorial/zh

ccbbe9791d615776b72e690540ccce51.png
源数据表(nobel)

7af9cb8ba9de6bbe2576fc7c815ba2ee.png

69bbfd7dd4ec962cc2c496d003f33a2d.png

3fc11a0646745e993014901a4163daed.png

80da3302b732603c84e777287878f468.png

f86b690fa08b158eeb964fd20f6b3a41.png
范围查询:between ……and……

ff8152d2e82ff3a5be7cdd8a8c6bed7c.png
select* 更简单

bbbc428e46e0915bab055ad63f1b5f69.png

62005e90188c4e1acd124ee9eb9d9d90.png

0280d6617fb9f7952b82c8e5c0ecc7f9.png

1da69a74439824b47f1de9e0d08418e6.png

5b5e15fb788887584cacdc00ad415379.png

f1a225a8e6e63c604c2643d24bbd43ff.png

749fc5dbff257749d47518e6805ea5f4.png

b5659a3059271c789918a1516352ffc0.png
注意:人名中本身含有所有格‘,为了避免和where子句中的单引号冲突,写成 ‘’

739510e4054fd44ce68473c5799f5f7f.png

d6b835644a89d0a8505b2a7e54d2c641.png
1:代表'Chemistry'或'Physics';0:剩余其它。
subject in ('Physics','Chemistry')返回值(0或者1),会对每一个subject做一个if的判断,有的是1,没有的是0,再用order by把这些值排序在下面。
不是这两个科目('Physics','Chemistry')的就是0排在前边,是这两个科目的返回1就排在后边了。

6b2382cec7a819cb2b5d9a627f3db8dc.png
Tips:不特别注明的话,默认是按升序(asc)排列

活学会用,举一反三

ac48fb4633094424e4a4b48797fcb612.png

ba22120e590afe2b222b05d975b3bc33.png
源数据表

15f3f1ea678dbdd1ec6f738840676e01.png
答案
:1:符合h开头的名字;0:不符合。默认升序排列(0→1),所以为了让hasgdjah排在前面,需要用desc(降序)。
和上面第14题原理一样,值得好好理解消化,举一反三,学以致用。

二、sqlzoo平台SUM and COUNT(汇总分析)

网址: https:// sqlzoo.net/wiki/SUM_and _COUNT/zh

6ee54cadb167b0ad7ff2d9a8a080c7e1.png
源数据表(world)

79e1578c7a558d8d0cc6f7a8178f5e75.png

b15e92b0127f495ebbc1dd3983471253.png

d47f5f004f59c300dd99fbb985783009.png
更简洁的sql语句

67bc4293c500bf44221599260626aba6.png

c2b0d616e3fb480092ac1ab02038a06c.png

4f0d5dfed83559500676a4e3ed3903c5.png

dfe3ea2774cf1a83eef9d5ff2fcbfad2.png
去掉group by也可以,对比上面两张截图,说明语句有优化的空间,还得继续精进。

2353e402dc6d71eb1de66d155f017d45.png

ff7169d97ef6d7f48fec3b8c1d4a2a89.png

f12eeebe131430f8bfb0e3c271b74a4e.png

9a4bdf4994b13074b2e6440b1554d72d.png

7a4110cf4c20b9a81d73b5d52d8cb086.png

客户端Navicat使用过程中报错,解决经验收集

ee84e2da85566d9f41e4582e3137d3b9.png
经验证,关闭减少打开的“查询”窗口,可解决此问题

总结

6c38072878fe91de6a49c3267c4cba68.png

对于同一个业务问题,可以用不同的SQL语句来解决,要多看多练,精进优化SQL语句的能力。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值