主知识点三:聚合函数、group by&having
【知识点引入】
我们先来认识最常见的聚合函数
有时候我们只是需要获取数据的汇总信息,比如说行数啊、平均值啊这种,并不需要吧所有数据都检索出来,只需要使用聚合函数即可
【函数说明】
AVG() 返回某列的均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列的和
注意聚合函数都会忽略列中的NULL值,但是COUNT(*)也就是统计全部数据的行数时,不会忽略NULL值
我们再来认识两个子句group by 和having
【标准语法】
select 字段名1
from 表格名
[where 条件代码]
group by 字段名1
having 条件代码
【语法解释】
之前学到的筛选操作都是基于整个表去进行的,那如果想要依据某列中的不同类别(比如说不同品牌/不同性别等等)进行分类统计时,就要用到数据分组,在SQL中数据分组是使用GROUP BY子句建立
GROUP BY子句可以包含任意数量的列,因而可以对分组进行多重嵌套,如按照班级和性别进行分组的话,结果中班级A包含男生组和女生组,班级B也包含男生组和女生组
having 子句和where 子句一样用于条件筛选,两者的操作符一致,但不同的是where是在指定分组前对数据进行筛选过滤,而having可以对分组后的数据进行筛选过滤
注意写的子句的顺序不可颠倒,需要严格按照语法的顺序!
【例题讲解】
【聚合函数】
点击链接SUM and COUNT - SQLZOO
第三题
【题目】
要求查询的是所有大洲(continent)为非洲(Africa)的GDP总和
求和用聚合函数sum,对gdp求和就写select sum(GDP),可以写上别名gdp总和
从world表中查询,写from world
筛选表中大洲(continent)为非洲(Africa)的数据,写where continent = 'Africa'
【运行代码】
select sum(GDP) gdp总和
from world
where continent = 'Africa'
【运行结果】
注意只使用聚合函数不使用group by时是对整张表作聚合运算
此时select后只能写聚合函数不能添加其他字段名
第四题
【题目】
查询有多少个国家需要进行计数,这里使用count函数
【运行代码】
select count(name) 数量
from world
where area >= 1000000
【运行结果】
【group by数据分组】
点击链接SUM and COUNT - SQLZOO第六题
【题目】
查询每个大洲(continent)和大洲内的国家(name)数量
这题需要对数据按照大洲字段分组,我们写出代码group by continent
并对每组的数据进行计数聚合运算,最后显示每个大洲和大洲中的国家数量,写出代码select continent,count(name)
对代码进行组合
【运行代码】
select continent,count(name)
from world
group by continent
【运行结果】
group by 数据分组类似于excel中的数据透视表功能
需要注意的是使用group by时,select后的字段只能写group by中出现过的字段和聚合函数,否则就会出现错误
【having基于聚合运算结果进行筛选】
点击链接SUM and COUNT - SQLZOO第八题
【题目】
查询总人口数量至少为1亿(100000000)的大洲
题目要求对大洲人口数量进行筛选
首先要对数据进行分组写出代码group by continent
然后对分组后的数据进行筛选此时使用having
要对组内的数据人口数量(population)求和进行筛选,写出代码 having sum(population) >100000000
对代码按正确顺序组合
【运行代码】
select continent
from world
group by continent
having sum(population) >100000000
【运行结果】
【总结】
常用聚合函数
标准语法
select 字段名1
from 表格名
[where 条件代码]
group by 字段名1
having 条件代码
【练习题】
【1】SUM and COUNT - SQLZOO第五题
【题目】
计算Estonia, Latvia, Lithuania这几个国家的总人口数
【正确答案】 select sum(population) from world where name in ('Estonia', 'Latvia', 'Lithuania') 【2】SUM and COUNT - SQLZOO第七题
查询每个大洲和该大洲里人口数超过1千万的国家的数量
【正确答案】
select
continent
,count(name) 'number of countries'
from world
where population >= 10000000
group by continent
数据璐(大数据分析岗位推荐师)
0
0
0
———————————————— 版权声明:本文为CSDN博主「数据璐(大数据分析岗位推荐师)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/shujlu0908/article/details/124294759