SQL学习笔记-聚合函数部分

  • 鉴于自己最近在做后端开发的工作时,发现自己的SQL能力实在太差,开始学习SQL语句基础,学习过程中在本博客进行笔记记录,课程参考:SQL课程

聚合函数是一系列SQL内置的方法,能够完成一些非常使用的功能,例如最大值计算、平均值计算等等。

MAX (计算最大值)

MAX函数便是通常用来计算最大值的方法,例如我们要获取发票总数的最大值:

SELECT MAX(invoice_total) 
FROM sql_invoicing.invoices;

对于聚合函数的调用,我们使用的是(),例如这里的 MAX(),执行的结果就是返回最大值:
在这里插入图片描述

MIN(计算最小值)

与MAX相反,MIN函数计算的就是最小值,同样的,我们计算发票总数的最小值:

SELECT MIN(invoice_total) 
FROM sql_invoicing.invoices;

结果:
在这里插入图片描述
结果就是返回了最小值。

AVG(计算平均值)

AVG就是计算平均值的函数,例如我们计算发票总数的平均值:

SELECT AVG(invoice_total) 
FROM sql_invoicing.invoices;

结果:
在这里插入图片描述

SUM(计算总数)

SUM用来计算总数,会返回列数的计算后数值,例如我们计算发票总数的总和:

SELECT SUM(invoice_total) 
FROM sql_invoicing.invoices;

结果:
在这里插入图片描述

COUNT(计算列数总数)

COUNT与SUM不同的是,计算的是列数的综合,不是数值的总和,例如我们计算发票有多少张:

SELECT COUNT(invoice_total) 
FROM sql_invoicing.invoices;

结果:
在这里插入图片描述
返回的是列数的总和。

对于聚合函数,只计算非空函数,若某列为空,该列不会参加计算,例如若计算列数时,使用了有空值的列名,例如:

SELECT COUNT(payment_date) 
FROM sql_invoicing.invoices;

结果
在这里插入图片描述
返回的数字明显小于使用总数来计算,这里就是将空值进行删除后计算的结果。

Group By(数据分组)

Grounp By关键词的作用就是给关键词进行分组,例如在计算总和时,我们使用SUM语句来进行查询:

SELECT SUM(invoice_total) AS total_sales
FROM sql_invoicing.invoices;

结果:
在这里插入图片描述
这时返回的时所有数据之和,若我们要按照每个客户的情况来分别进行计算总和的话,这里就用到了Group By关键字在,例如,我们使用Group By将计算结果以客户来进行分开:

SELECT invoice_id AS id, (invoice_total) AS total_sales
FROM sql_invoicing.invoices
GROUP BY invoice_id;

结果:
在这里插入图片描述
如果与其他关键词进行复用时,需要记住,语句关键词的执行过程:

FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY

除了可以对单个的列进行GROUP BY外,还可以对多个列进行GROUP BY,例如我们将订单表和客户表进行合并后,按照state和city,两个条件进行分组:

SELECT
	state,
    city,
    SUM(invoice_total) AS total_sales
FROM invoices i
JOIN clients USING(client_id)
GROUP BY client_id

会将相关的分组进行合并:
在这里插入图片描述

HAVING

HAVING关键词用来对GROUP BY之后的语句进行条件查询,GROUP BY之后的列并不能直接使用WHERE来进行查询,需要使用HAVING才能够进行查询,例如,我们对发票总数进行GROUP BY后,想要筛选出大于500的发票,正常思路是使用WHERE来进行查询:

SELECT 
	client_id AS id, 
	SUM(invoice_total) AS total_sales
FROM sql_invoicing.invoices
WHERE total_sales > 500
GROUP BY client_id

在执行的时候会报错,内容是未找到total_sales列。
实际上在执行对GROUP BY之后的列条件查询时,用到的是我们的HAVING语句:

SELECT 
	client_id AS id, 
	SUM(invoice_total) AS total_sales
FROM sql_invoicing.invoices
GROUP BY client_id
HAVING total_sales > 500

结果:
在这里插入图片描述
HAVING语句跟WHERE语句的区别可以简单理解为:
HAVING用来在GROUP BY之后进行条件查询,WHERE语句可以用来在GROUP之前进行条件查询。

HAVING语句只能够条件查询SELECT上有的列名。

ROOLLUP

用来汇总数据的聚合函数,用来将所有的数据进行结果集的聚合返回。
例如我们想要获取SUM()运算函数后的列的总和,就可以不用使用其他方法,只需要使用ROLLUP函数,例如:

SELECT 
	client_id,
    SUM(invoice_total) AS total_sales
FROM invoices
GROUP BY client_id WITH ROLLUP

在最后的语句中我们使用关键词: WITH ROLLUP ,获得的结果就是:
在这里插入图片描述
在这里会将所有有意义的列进行汇总,类似于excel中的列总和计算的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值