主知识点三:聚合函数、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