SQL聚集函数

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

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 进行排序。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值