sql 列求和_SQL 中文笔记 aggregation

本文是SQL for Data Analysis课程笔记,详细介绍了SQL中的聚合函数,包括Count、Sum、Min、Max、Average及其使用场景。还讨论了Group By、Distinct、Having以及Date处理和Case语句的应用,提供了相关示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

823d18568f5b0595eab8ce38c1cd4583.png

*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尽量做到不要重叠,否则会乱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值