SQL基础教程整理(三)关于聚合函数,分组,排序

一.关于聚合函数

  • 首先常用的聚合函数有count,sum,avg,max,min 这些函数的功能不再赘述,只是有一些需要注意的地方
  • 注意事项:除了count(*)是对所有行进行统计之外,其余的聚合函数再以列名做参数时,会把该列为NULL的排除在外,不会参与到计算当中
  • 注意事项:使用聚合函数删除重复值时,distinct关键字需要写在聚合函的参数内,列名之前

二.关于GROUP BY子句--切分表的一把刀

  • 首先根据单词的意思进行理解就是根据什么进行分组,更形象一些的理解就是对表进行切分
  • 这里需记住几个注意事项:1.只能写在select之中(意思是,只有在select语句中才会出现group by)    2.不能使用select子句中列的别名  3.聚合结果无效  4.where子句中不能使用聚合函数
  • group by(列名), 当语句中出现group by时,select需要注意的问题有,此时select语句能输出的内容是列名,或者聚合函数,因为group by理解为是对表进行分类统计,比如对十个人按照身高分类,那么对于身高180的人来说,你偏要输出他们的体重,那么这些人的体重是不一样的,是无法输出的,所以只能输出他们的身高,以及对这些人的其他属性进行聚合
  • 聚合键含NULL的情况,把NULL单独当做一个类型
  • 使用where子句时的执行顺序:from-->where-->group by-->select 也就是DBMS会先通过where子句对行进行过滤再根据group by子句进行分组

常见错误:1.在select中输出了聚合键外的列  2.在group by中使用了别名  3.在where中使用了聚合函数------只有select和having和order by子句中可以使用聚合函数

三.为聚合结果指定条件--想得到特定分组怎么办??

  • 这时候我们需要在group by 子句后使用having子句
  • 关于having子句的语法类似于where子句,这里有一些需要注意的地方就是having子句更多的对分组进行过滤,他能够给使用两种要素:聚合函数和group by中指定的列名(聚合键)
  • 比如说,在group by(money),根据钱对数据进行分类,那么你需要选择出钱大于500的分组,那么having应该写成  having money >500

四.对查询结果进行排序--order by

  • 如果表中有一列叫做学号,我们想让查询结果按照学号由小到大进行排序,需要写成order by number asc,如果想按照从大到下的顺序进行排序写做 order by number desc,其中asc表示升序,desc表示降序,但是如果不写的话是默认升序的
  • 对多个列进行排序,直接在order by 子句中书写多个列名即可比如,先按照学号进行排序,学号相同时按照分数进行排序    写做 order by number,grade
  • NULL的顺序:order by的列中若值为空,则不参加排序,将该行放在结果的首部或者尾部进行显示,具体是在首部还是在尾部根据DBMS的不同而不同
  • 可以在order by中使用别名原因是,from-->where-->group by-->having-->select-->order by,select的执行顺序在order by 之前,也就是说,当你在order by中使用别名时已经知道了别名的存在,但是在group by中使用别名时还不知道别名的存在,所以不能在order by 中可以使用别名,但是在group by中不能使用别名


      

猜你喜欢

转载自blog.csdn.net/qq_36437446/article/details/80507347