SQL聚集函数

本文详细介绍了SQL中的聚集函数,包括COUNT(), MAX(), MIN(), SUM()和AVG(),并提供了多个使用示例,如查询最大生命值大于6000的英雄数量、对数据进行分组统计等。同时,讲解了WHERE和HAVING子句在数据筛选和分组统计中的区别。通过实例展示了如何结合使用这些函数进行复杂的数据库操作。

SQL聚集函数

聚集函数是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。通常我们可以利用聚集函数汇总表的数据,如果稍微复杂一些,我们还需要先对数据做筛选,然后再进行聚集,比如先按照某个条件进行分组,对分组条件进行筛选,然后得到筛选后的分组的汇总信息。

聚集函数都有哪些

SQL 中的聚集函数一共包括 5 个,可以帮我们求某列的最大值、最小值和平均值等,它们分别是:
COUNT()  总行数
MAX() 最大值
MIN() 最小值
SUM() 求和
AVG() 平均值

使用示例:
查询最大生命值大于 6000 的英雄数量
SELECT COUNT(*) FROM heros WHERE hp_max > 6000;

COUNT(*) 只是统计数据行数,不管某个字段是否为 NULL。

查询最大生命值大于 6000,且有次要定位的英雄数量
SELECT COUNT(role_assist) FROM heros WHERE hp_max > 6000;

查询射手(主要定位或者次要定位是射手)的最大生命值的最大值是多少
SELECT MAX(hp_max) FROM heros WHERE role_main ='射手' or role_assist = '射手';

一条SELECT语句中可以使用了多项聚集函数查询

AVG、MAX、MIN 等聚集函数会自动忽略值为 NULL 的数据行,MAX 和 MIN 函数也可以用于字符串类型数据的统计。

如果是英文字母,则按照 A—Z 的顺序排列,越往后,数值越大。如果是汉字则按照全拼拼音进行排列。

需要注意的是,针对中文字符使用聚集函数需要使用CONVER(name USING gbk)转化为gbk类型。

也可以对数据行中不同的取值进行聚集,先用 DISTINCT 函数取不同的数据,然后再使用聚集函数,查询不同的生命最大值的英雄数量是多少:

SELECT COUNT(DISTINCT hp_max) FROM heros


对数据进行分组,并进行聚集统计

分组后只可以查询GROUP BY的列和聚集函数

做统计的时候,可能需要先对数据按照不同的数值进行分组,然后对这些分好的组进行聚集统计。

比如我们想按照英雄的主要定位进行分组,并统计每组的英雄数量:
SELECT COUNT(*), role_main FROM heros GROUP BY role_main;

如何使用 HAVING 过滤分组,HAVING与WHERE的区别

查询按照英雄的主要定位、次要定位进行分组,并且筛选分组中英雄数量大于 5 的组,最后按照分组中的英雄数量从高到低进行排序。
SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist HAVING num > 5 ORDER BY num DESC;


HAVING 的作用和 WHERE 一样,都是起到过滤的作用,只不过 WHERE 是用于数据行,而HAVING 则作用于分组。(where执行顺序先于group by)

对于分组的筛选,要用HAVING,HAVING 支持所有 WHERE 的操作,因此所有需要 WHERE 子句实现的功能,你都可以使用 HAVING 对分组进行筛选。

eg:
SELECT COUNT(*) as num, role_main, role_assist FROM heros WHERE hp_max > 6000 GROUP BY role_main, role_assist HAVING num > 5 ORDER BY num DESC
先增加了一个过滤条件,即筛选最大生命值大于 6000 的英雄。这里我们就需要先使用 WHERE 子句对最大生命值大于 6000 的英雄进行条件过滤,然后再使用 GROUP BY 进行分组,使用 HAVING 进行分组的条件判断,然后使用 ORDER BY 进行排序。
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值