练习一、汇总分析
1、常见的几个函数及作用:
![5369314f575ffabff872226a426d1abe.png](https://i-blog.csdnimg.cn/blog_migrate/df088892c8f0fe73289d4c09a01aa868.jpeg)
每种汇总函数的实际操作语句如下:
(1)count函数:
![ca7035fedfbb2d7bda18158eca4667a8.png](https://i-blog.csdnimg.cn/blog_migrate/77b585cd824d323ff16fbf95fb885273.jpeg)
count函数加列名就可以求出这个列名有多少行,需要注意的是,如果本列中存在空值的话,那count函数会先去掉空值然后再计算,当列中有空值存在,而我们又想把空值也计算的话那就在count函数中加入星号(*),这样就能把空值计算进去。count函数的空值计算如下:
![8b3942079ce913cd73356ba95154e86f.png](https://i-blog.csdnimg.cn/blog_migrate/5015d4aae67310780e765061ffeebf8a.jpeg)
![891da6f4b2d1bcde5efbb099d206a4f0.png](https://i-blog.csdnimg.cn/blog_migrate/94002495ead4707c8d86e641cefff4b5.jpeg)
(2 )求和函数sum:
![0eaeaa2852550320f20516f504dac4df.png](https://i-blog.csdnimg.cn/blog_migrate/ba8c5dfa8a03c646247fd79c7c691c39.jpeg)
(3)平均值函数avg:
![2142759faba2203e762558d346b95da3.png](https://i-blog.csdnimg.cn/blog_migrate/e2754470e250884f05bfb4be1ec45164.png)
(4)最大值函数max和最小值函数min:
![ed58bd29557092dee6375b9c6ad13c9b.png](https://i-blog.csdnimg.cn/blog_migrate/0c060bf3d796befa3f388a2eb2496f6f.jpeg)
最后以一张图来说明这5个函数的注意事项:
![dce2c164bb83095cf163244bf6771188.png](https://i-blog.csdnimg.cn/blog_migrate/cb8cb042f8543864ec7f958edddcaf45.jpeg)
当count函数使用星号时表示对所有列名进行计算求值,求和函数(sum)及求平均值函数(avg)只能对数值类型的列进行计算,不是数值的话会报错,而其他的函数对所有类型的列都可以进行计算。
2、汇总练习:
![a6e1ccb61c57e173d7191832bba1a136.png](https://i-blog.csdnimg.cn/blog_migrate/2410e70c64a2f8c93fb7c01c2c1d770e.jpeg)
![b0ec60994f8561deb6c3390aa60666c3.png](https://i-blog.csdnimg.cn/blog_migrate/bcbe750bcc49bc2a413131a1f08a89f6.jpeg)
练习二、分组及常见面试题:
1、分组group by:以学生表中的性别来分组做个例子,sql的语句如下:
![55470f3b6115fc4412419e1cbd705e37.png](https://i-blog.csdnimg.cn/blog_migrate/b03dff6752afcbec526cba12c80a7f14.jpeg)
SQL的运行顺序如下:
![6398814423ffb3de96086882263c1add.png](https://i-blog.csdnimg.cn/blog_migrate/60b55580e9134e494c1a69af133c08ec.jpeg)
先运行途中蓝框中的子句,蓝框中的子句按照书写顺序运行,最后运行select子句。
2、面试习题解答如下:
![6419133a06fa8f806f671d8294980a7e.png](https://i-blog.csdnimg.cn/blog_migrate/415d66b0487c320a06526c80fb793f3d.jpeg)
![2c649ced89fdd3e57b720c5313458be1.png](https://i-blog.csdnimg.cn/blog_migrate/613efe789431569ac24108d4c10c5843.jpeg)
![01cd8de6f66e843a4ed399374f196076.png](https://i-blog.csdnimg.cn/blog_migrate/180c7b034ec2674b73f8fbc43d2de1dd.jpeg)
怎样判断一个题目是否需要分组分析?当题目中出现’每‘’各‘等词时表示需要分组计算。
练习三、对分组结果指定条件及面试练习:
1、对分组结果指定条件having:
![258037f3136da05e04933cd90325e871.png](https://i-blog.csdnimg.cn/blog_migrate/69e093a6a3bfc4fbcb261ed4976b6fe5.jpeg)
![79be388e8f8b033a56d3e679e9756f76.png](https://i-blog.csdnimg.cn/blog_migrate/adc9bf6ab1135309a2bfb9d01d283a8a.jpeg)
SQL的运行顺序:
![f75c445a479d29917952eaf7662aab9d.png](https://i-blog.csdnimg.cn/blog_migrate/304e8db4cc60aeb5b774d354a657bd7a.jpeg)
2、面试习题练习解答:
![b90a5876c425da8d26bd7254fad79257.png](https://i-blog.csdnimg.cn/blog_migrate/c727b3b45f9eb3f45c6fc9bb316bc6aa.jpeg)
![349c8a9c295d87efd6281533c4a98c33.png](https://i-blog.csdnimg.cn/blog_migrate/568d4a9c713676be16d640d62a02a09d.jpeg)
![68bb9ca6cae22d7fed65613ce5722b7d.png](https://i-blog.csdnimg.cn/blog_migrate/758e72b1e6b84ce4da64f0ad04bf73d4.jpeg)
练习四、计算每门课程的平均成绩且平均成绩大于等于80分:
如何使用SQL解决业务问题:
![25796679cf2d74103bbff02a1e4a99dc.png](https://i-blog.csdnimg.cn/blog_migrate/aab2730ddce36a298083956e7ccd5994.jpeg)
![a1ae54a8d781606d3952c73d7a053188.png](https://i-blog.csdnimg.cn/blog_migrate/1d0555c6aed7de64902583d6cefca5b2.jpeg)
![035ab1ec923f3dfef4159e8f5fa2659c.png](https://i-blog.csdnimg.cn/blog_migrate/39a2d7dc473602d09be6fd7c70a5ec00.jpeg)
![a3655df7f3b7a5602d878845ae09fa44.png](https://i-blog.csdnimg.cn/blog_migrate/ddc779c6acd5ce3c46d994b872145e41.jpeg)
练习五、对查询结果排序:
1、排序(order by):
![b98d3804fb513dbda330d66e8d2b209a.png](https://i-blog.csdnimg.cn/blog_migrate/05211990d9107dea89ce5c0670b64c74.jpeg)
![d83b5de40e46a1196d7264ff77febcf0.png](https://i-blog.csdnimg.cn/blog_migrate/85a614f72f7b0a88034216fc68841c95.jpeg)
![07a2d84d27718815458bd5d58332cfcb.png](https://i-blog.csdnimg.cn/blog_migrate/ee7ea6e6210654988651499219519587.jpeg)
![e6be98e2d1d2f89771eb350437febdd3.png](https://i-blog.csdnimg.cn/blog_migrate/661e842cb577c470dd4f6ef391b3bdd5.jpeg)
指定多个排序中按照从做往右顺序排序,如上图,先按照成绩升序的排序方式,当成绩出现一样时再按照课程号进行降序排序
![9ac61ab899b0cff828649070c14784e9.png](https://i-blog.csdnimg.cn/blog_migrate/6c56950c6e7930911331af4a0aabd217.jpeg)
当有空值排序的时候,空值都会排在最前面。
![96f411ecaff9cad323bf23254f427aa5.png](https://i-blog.csdnimg.cn/blog_migrate/94e7b9553c988f965db0c5aa3d960901.jpeg)
当查询结果数据太大,而我们只需要看其中某些数据时,需要用到limit的语句。
2、面试习题解答:
![ee1f63f7d9ab38cb6170bd0782b9fb2f.png](https://i-blog.csdnimg.cn/blog_migrate/139c97f56dd7748cf4d88895ad1591ef.jpeg)
![a256961a7dde2b7f953607809edf8166.png](https://i-blog.csdnimg.cn/blog_migrate/da0a40ce7d63eca0bede989c4634f8c2.jpeg)
练习六、SQL的报错类型:
![f064eab7c07285001bdb52ec6bb87b19.png](https://i-blog.csdnimg.cn/blog_migrate/750f5dc0c153d3f68460edb377d289ae.jpeg)
对分组指定条件having使用select子句的别名系统会报错,因为having的子句在select子句之前运行,所以having不能使用select的别名。
![2fba770ddc38bb7a8b7bd11acf8fdad0.png](https://i-blog.csdnimg.cn/blog_migrate/8dca24f7eba6676b9c1b79b9a379c04d.jpeg)
在where中不能使用函数count函数,否则系统会报错。
最后附上老师的课后总结图片,这张SQL的运行顺序要牢记。
![43475ed44658e328241417e4ea9674f7.png](https://i-blog.csdnimg.cn/blog_migrate/33c671e48a4ae7313e33a33f75baa706.jpeg)
SQLZOO的练习答案:
![5eb4fa7ab110f64bef9c4e224aabd3f5.png](https://i-blog.csdnimg.cn/blog_migrate/04de6c578d741c5f14d76e6d6055757e.jpeg)
![34495e0fbc819b09c251f9cd8ecaa4b2.png](https://i-blog.csdnimg.cn/blog_migrate/c77f5abddc2bad9fa1098f29e7f87b13.png)
![45802c673c9a11e5283e6799356484f2.png](https://i-blog.csdnimg.cn/blog_migrate/30c74719e93de5cece1e4f7b4f69c655.png)
![011113d60341864a73bf5ad0dae0b66d.png](https://i-blog.csdnimg.cn/blog_migrate/129b34bcc36b71b6206ce065fc92eebf.jpeg)
![e4f42568d67197e7695826f588c9210f.png](https://i-blog.csdnimg.cn/blog_migrate/7fec2c983eda8cc0694a8cba55dfd3f6.jpeg)
![29e5a66730e22e3416187a1a17f596eb.png](https://i-blog.csdnimg.cn/blog_migrate/5f24958f0234c6d1da3d958d044c37ac.jpeg)
![c15535f27950d342da247fcfe5e6d4ae.png](https://i-blog.csdnimg.cn/blog_migrate/f06961887219b0169a218a2e14abbcbb.jpeg)
![179d317f2ee0c7db97ffcaaf7af3a845.png](https://i-blog.csdnimg.cn/blog_migrate/d429c51766827add889b52a8055184b0.jpeg)
![41034392524fcf01ea9e426b53318fba.png](https://i-blog.csdnimg.cn/blog_migrate/72bfd52687fa2f124b0ce2e9ca0e4e69.jpeg)
![901f1d6614e4422959d38120e88e9ca8.png](https://i-blog.csdnimg.cn/blog_migrate/4beb8d48e110aa3a53d359baac7e12a8.jpeg)
![08294ac6b0ff1fa626d3ecd3d2df6556.png](https://i-blog.csdnimg.cn/blog_migrate/2fc8807c8f2785f060a072aaa66f2e7c.jpeg)
![61bd31098c02921bfd0eb0792913a76b.png](https://i-blog.csdnimg.cn/blog_migrate/0ecc984070bba115095be830bbde7fbe.jpeg)
在上图中因为名字中也含有单引号,此时我们需要用到转义字符转换才能运行,否则会报错。常见转义字符:
![631d223146dc74f7f16e43053ad5f5bf.png](https://i-blog.csdnimg.cn/blog_migrate/e7e12c18987d5326ff5ac9d5e7b99581.jpeg)
![e543b0c4584a1a111c2530f485507d7b.png](https://i-blog.csdnimg.cn/blog_migrate/9bc7fa172e3eb9084cc6d68e9a245caa.jpeg)
![e06b9826ad6d6a826eff67421cc57d26.png](https://i-blog.csdnimg.cn/blog_migrate/31e1bad0a0ab0f7a8fdd7c4aa8e24230.jpeg)
这道题的SQL语句解释如下:subject in ('Physics','Chemistry')返回值(0或者1),会对每一个subject做一个if的判断,再用order by 将这些值排序在下面。
![716810b9393210167ba6da0d072f533c.png](https://i-blog.csdnimg.cn/blog_migrate/5470c479b0ff6372ec8f49f66560e171.png)
![6f2700cdd8f8245be29f4ce03efb3985.png](https://i-blog.csdnimg.cn/blog_migrate/ac46302b292b392531b063c9136d0d34.jpeg)
SQLZOO汇总分析答案:
![de2e6dc951e07db610f96210cb811a20.png](https://i-blog.csdnimg.cn/blog_migrate/bc5508685bda633561ab6057adb6cb55.jpeg)
![634ae754cd0656f21b6a8f00e21570ad.png](https://i-blog.csdnimg.cn/blog_migrate/00a58febad9a1dd6b743017a7c4a34ee.png)
![a942797cb3409aa8c5d622285ce8bf0e.png](https://i-blog.csdnimg.cn/blog_migrate/cf377a7f0af1466c5240dfa8afb7bc19.png)
![f025624df9cad99f273c4f4fac7058d6.png](https://i-blog.csdnimg.cn/blog_migrate/d8e4a73d5fe0a2b65496c3c39a5425f5.png)
![d6fe02a9efef9e0838b508cd5eda46f7.png](https://i-blog.csdnimg.cn/blog_migrate/bf6b91d1597f242afcc727c68f7cf1ef.png)
![238f35e1c4a0a8fc27cd8b09992ed56f.png](https://i-blog.csdnimg.cn/blog_migrate/bfc95d1b715f1291d07711901aaafe2c.jpeg)
![4cd87470bfdf5c9e070fff9faba5cbce.png](https://i-blog.csdnimg.cn/blog_migrate/c3e5952630746d22966bf0a0b6cc7cb4.jpeg)
![5a44324951d24475ed8a8ecb5871f1ce.png](https://i-blog.csdnimg.cn/blog_migrate/7bc57e6e718f802862d7d7bf6a412f73.jpeg)
总结:本章的知识点蛮多的,而且对SQL语句的理解需要细致,在练习中也发现了有时自己对题目的理解不是很清楚,特别是在分组练习中,有时候不是很明白到底需不需要进行分组,以至于做出来的答案会跟老师的不一样,以后多强化一下自己这方面的练习。