编程技能(十)掌握SQL——单表查询基本语句

思维导图

本文通过案例进行讲解

假设数据库有一个名为students_grade的表:

计算所有学生各个学科在2019年的平均分,筛选出平均分超过60分的记录,并且最后以平均分进行降序排列。

  • 代码示例:


1、关键字的执行顺序

from -> where -> group by -> select -> having -> order by

  • 关键字的执行顺序并不是完全按照代码中书写的顺序来执行的


2、from

  • from,后面跟着原表,最终的结果表是基于该表进行加工得到的

  • 案例中,原表是students_grade,其全名是由库名和表名两部分组成的,用“.”连接,如dw.students_grade

  • 所以在表名中使用“_”进行连接,而不用".",避免引起歧义


3.where

  • where,表示在计算前对原表的记录进行筛选

  • Hive中大部分表示分区表,使用分区字段可以加快查询速度

  • 对于分区表,where条件是不可或缺的,一定要在where条件中选择分区范围


4.group by

  • group by,用于分组,确定后面聚合计算的范围

  • 案例中要计算同一个学生、同一个学科的平均分,因此使用group by id,name,subject

  • 对于简单的不需要进行分组计算的查询,可以不使用group by


5.select

  • 在from、where、group by语句都执行完成后,才会开始执行select语句

  • select后面的是最终会出现在结果表的字段

  • select后的字段包括两部分:用于分组的字段和利用聚合函数计算出的字段


6.group by

  • 在group by语句存在的情况下,select后的所有非聚合字段都会被视为分组字段,需要在group by语句中出现,否则就会报错

  • 在group by后出现的分组字段,不在select语句中出现,不会报错,但是会引起歧义

  • 需要保证select后的非聚合字段和group by后的分组字段一一对应


7.as

  • 在select语句中可以使用as为所有字段重命名,称为字段别名

  • 通过聚合计算得到的字段,这一步是不可或缺的,否则会给出默认的没有任何含义的字段名

  • 由于group by语句是在select语句前执行的,因此select语句中不可以出现字段别名


8.having

  • 只有存在group by语句时才会使用having,没有group by语句而只有having会报错

  • having主要用于对聚合计算后的字段进行筛选

  • having语句在select语句之后执行,可以使用字段别名


9.order by

  • 用于排序

  • 基于一列进行排序的语法格式:"order by 字段名 asc/desc"

  • asc表示升序排列,desc表示降序排列

  • 基于多列排序的语法格式:"order by c1 asc, c2 desc,c3 asc"

  • order语句在select语句之后执行,可以使用字段别名


参考文献

1.《拿下Offer 数据分析师求职面试指南》徐麟 著

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容