
*SQL for Data Analysis课程笔记,来源于Udacity.
*是我上课所记,顺便分享出来便于不方便看视频课程的小伙伴参考;其次如果有错误的部分,还望大家指正,谢谢。
Aggregate 聚集
Count:某特定列有多少行
Sum:某特定列中数值总和
Min max average:也是对某特定列而言
Null:no data exists in sql
寻找null的行数:where ...is null (用is null,不能用=null,因为null不同于0和空格,他不是数值)
找除了null以外的行:is not null
null经常出现的情况有:
1、right join 和left join时,2表未能match部分会出现null
2、在missing data的时候会出现null
一、Count
计算所以包含non-null data的数量(不包含的是整行都是null的情况,一般很少)
计算的对象可以是*,也可是某特定列。其中数值和文本都可以被计算,唯独null不可被计算
二、Sum
不同于count,他的计算对象只能是数值(包括空白,空白记为0)
只能计算垂直的列的总和,不能计算横向求和
语法sum(....)
三、min max 是ignore null
同count一样,可以作用于非数值的列
根据列的类型,同类型的才有计算的意义:
Min: max:
最小数值 大
最早时间 晚
最接近a的文本 z的文本
语法:min/max(...)
四、average (AVG)
只作用于数值
无视null:意味着不会被计入分子和分母
若要让null为0,则要先求和,除以计数,而不是使用平均数
语法:AVG(...)
Midian 在sql中很难用
五、group by
作用:抓取单个账户的数据之和,而不是整个数据集
之前的sum min max都是对总体而言
若要对某列中的每一行进行数据聚集,则需要使用group by
例如:对某列(每一个account id,分组求sum min max)
语法:
Select account_id,
Sum(a) as a
Sum(b) as b
Sum(c)as c
From 表1
Group by account-id
波浪形处可以添加多个列名(对顺序不敏感),表示对多个列进行分组聚集,用逗号隔开
Group by子句是在where(如有)和order by子句之间
在limit情况下求aggregate是没有意义的
原本sum只是对特定列就总和
新增的group by 功能让原本对总体求和,变为分组求和
课程19:distinct
语法:select distinct 列1,列2.... (是对列1——列n都进行distinct)
作用:选出没有重复的结果
课程22:having
用于过滤和筛选,当查询内容被agg后
因为经过agg的内容,不可以用where来有条件查询,所以用having替代
即在agg中若要使用where,则用having替代
语法:having sum(。。。)>=2500000(having后面的只能是agg方程,不能是经过重命名的内容。
和where不同的是:
where是在group by之前
having是在group by之后
但是两个都是在order by 之前
课程25:date
直接对date进行agg是不现实的,行为时间是独一无二的
在databases中的时间格式是:yyyy mm dd / 00(小时):00(分钟):00(秒)
所以对data进行agg可以通过date trunc和date part实现
格式是date_trunc(‘....’,时间),省略号部分是代表时间以什么为分割,second,day,month,year
如果需要从一天中拉取部分:即想知道是一周中的周几?用date_part
格式date_part(‘...,’时间)
Dow=day of week, 一周内的某一天,结果是0(周天)到6(周六)
区别:datepart返回的是数值,datetrunc返回的具体的年月日(当年第一天,当月第一天)
课程29:case
Case statement 处理的是if...then的问题
即建立一个衍生列,对符合条件的内容进行命名
语法:
Select 句子中加上:
Case when 条件 then 结果1(加引号) else 结果2(加引号) end as 衍生列名称(不用加引号)
其中条件可以用and like in 等等所以之前见过的逻辑语言
结果1代表的是当满足条件的,对新列空格赋值结果一
结果二代表当不满足条件的,对新列空格赋值结果二
衍生列名称,即新增列的名字
一个select语句中可以有多个case statement,但是在执行的时候是从前到后执行,多个case statement尽量做到不要重叠,否则会乱