本文主要介绍SQL分组函数group by和聚合函数(COUNT、MAX、MIN、AVG、SUM)的一些解释。有需要的朋友可以参考一下。
1 分组聚合的原因
前面关于SQL中分组函数和聚合函数的文章已经介绍过了,有可能更好的理解这两个函数。group by是分组函数,COUNT、MAX、MIN、AVG和SUM是聚合函数。
拿图中的数据,解释一下。假设您根据product_type字段进行分组。分组后,结果如下。
按产品类型从产品组中选择产品类型
从图中可以看出分为三组,分别是厨具、衣服、办公用品,相当于对product_type字段进行了去重。事实上,按功能分组具有消除重复的效果。
从产品中选择不同的产品类型
假设分组后,我想看一下价格,也就是sale_price字段的值。按照下面的写法,会报告下面的错误。
按产品类型从产品组中选择产品类型、销售价格
这是为什么呢?原表按product_type分组后,厨具对应四个值,衣服对应两个值,办公用品对应两个值。这就是在获取sale_price字段时报告错误的原因。您不能在一个空间中填写多个值。此时,您可以使用聚合函数,如求和、求平均值、最大值和最小值以及行数。聚合后,只有一个值。
按产品类型从产品组中选择产品类型、总和(销售价格)、平均值(销售价格)、计数(销售价格)、最大值(销售价格)
对于分组多个字段,原理是相同的。请记住上面的两点:数据包重复数据删除和数据包聚合。
2 distinct和group by去重的区别 Distinct 和group by 设计时侧重点不一样
Distinct仅用于去除权重,而group by用于聚合统计。
两者都有去重的效果,只是执行的效率不同。
单字段重复数据删除
distinct从产品组中选择不同的产品类型BY从产品组中选择产品类型BY产品类型
多个字段去重
-distinct select distinct product _ name,product_type from product-GROUP BY select product _ name,product _ type from product GROUP BY product _ name,product _ type
执行效率
Select列名1,column name 2from表名查询条件group by分组类别having指定结果分组条件order by列名(desc)限制数
SQL语言的运行顺序,先执行上图的第一步,再执行select子句,最后过滤结果。Distinct在select子句中,group by在第一步中,因此group by重复数据消除比distinct重复数据消除更有效。
sql中聚合函数和分组函数_SQL选择计数聚合函数-语法示例解释
sql中聚合函数和分组函数
计数运算符通常与GROUP BY子句结合使用。它是SQL“聚合”函数之一,包括AVG(平均值)和求和。
计数运算符通常与GROUP BY子句一起使用。它是SQL的“聚合”函数之一,包括AVG(平均值)和求和。
该函数将计算行数,并将该计数作为结果集中的一列返回。
该函数计算行数,并将计算结果作为结果集中的一列返回。
以下是您可以使用COUNT的示例:
以下是将COUNT用于以下目的的示例:
对表中的所有行进行计数(不需要group by)
计算表中的所有行(不分组)
计算数据子集的总数(需要语句的Group By部分)
计算数据子集的总数(需要语句的“分组依据”部分)
作为参考,下面是我们的示例学生数据库中所有行的当前数据。
作为参考,这是示例学生数据库中所有行的当前数据。
select studentID,FullName,programOfStudy,sat _ score from student-包含感兴趣字段的所有记录
此SQL语句提供所有行的计数。请注意,您可以使用“AS”为结果计数列命名。
此SQL语句提供所有行的计数。请注意,您可以使用“AS”来命名结果计数列。
选择count(*)作为studentCount from student-所有记录的计数
这里我们得到了每个研究领域的学生人数。
在这里,我们得到了每个研究领域的学生人数。
从包含group by programOfStudy的student表中选择studentID,FullName,count(*)作为studentCount
这里我们得到了SAT分数相同的学生人数。
在这里,我们得到了相同SAT分数的学生人数。
从包含group by sat_score的student表中选择studentID,FullName,count(*)作为studentCount。
下面是一个使用活动资金表的示例。这是2016年美国总统竞选期间每笔交易的美元和每个里坡政党的捐款数量的总和。
这是一个使用广告系列资金表的例子。这是2016年美国总统大选期间,每笔交易的总金额和各个政党的捐款金额。
select Specific_Party,Election_Year,format(sum(Total_$),2)作为捐款$Total,count(*)作为捐款数
来自组合方数据
按特定政党、选举年份分组
having Election _ Year=2021
与所有这些事情一样,还有更多事情要做,所以请查看数据库管理员的手册,并享受自己尝试不同测试的乐趣。
所有这些事情还有很多要做,所以请参考数据库管理员手册,自己尝试不同的测试。很有意思。
sql语句聚合函数和分组操作的注意事项
Group可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个汇总表。
按几个重要约束分组:
(1)列名1)选择句子和having或where句子必须是分组列或列函数。列函数为group by语句定义的每个组返回一个结果。
(2)一般情况下使用group by和aggregate函数是有意义的,比如count、sum、avg等。使用group by的两个元素:
(3)出现在select之后的字段或者在聚合函数中,或者在group by中。
(4)要筛选结果,可以在group by之前使用where或group by before having。
第(4)项根据数据库不同可能不适用,最好不要这样用,老老实实用having。
SQL聚合函数和分组数据语法及概述
(一)聚合函数是指对列上数据的操作,起统计作用。前几个函数是第一行记录得到的数据,包括前几个日期函数、数学函数、字符函数、转换函数和条件判断函数。
常用的聚合函数有:count、sum、avg、max、min。这五个函数可以统计记录的数量、总和、平均值、最大值和最小值。
Count:count函数计算查询数据中的记录数。此函数不计算具有空字段值的值。也就是说,如果一个查询的字段有空值,那么空值的个数就会被扣除,这样就可以设置没有空值的查询条件。
如果要设置空值查询,可以使用WHERE字段为空作为条件。
Sum: Sum函数sums,只能对数值型数据进行操作,也忽略空值。示例:
选择(考试分数)作为计算机总分
从分数
其中课程编号(从课程中选择课程编号,其中课程名称=“计算机”)
Avg:要找到平均值,参数也必须是数值字段名或带有数值结果的表达式。
Max,min:这两个函数求最大值和最小值,但是不能放在SELECT子句的WHERER和字段名位置。
示例:select max(x1)from y where max(x2)in(select…)的语法错误。
Select x1 from y where x2=max(x3)语法错误。
select max(x1)from y where x2)in(select max(x2,)是正确的。
注意:所有五个函数都可以使用distinct来计算非重复值:
选择count(distinct)作为课程表中的课程数
Access和mysql不能将distinct放入参数中。解决方法:查询distinct并将其作为新表保存到语句中,然后使用count。
(2)数据分组是指根据指定字段的不同值将数据表中的数据分成许多组,使用group by子句进行操作。
Group by通常不会直接查询所有字段并对其进行分组。在“分组依据”和“选择”之后,分组字段和查询字段通常是一致的。因为select * from y group by x会产生错误,所以通常会对字段进行分组,并通过聚合函数计算分组值。
聚合函数和组的组合并设置查询条件:可以对一个字段进行分组并设置条件,这样结果将是计算分组并满足条件的值。示例:
查询各所属部门所有男生的值:
选择部门,count(*)作为学生中的男生人数,其中性别='男性'按部门分组
查询直方图:使用replicate()函数,以分组后的数据为次数,重复一个设定的符号。
查询结果:order by语句、ASC和DESC在group by之后。
Case表达式和group by的组合:
选择部门,计数(案例
当性别=男性时,则为1
否则为空
End)随着男生数量的增加,
计数(案例
当性别='女性'时,则1
否则为空
End)作为女孩数量
来自学生组(按附属部门)
Hanving子句设置分组group by的分组查询条件。
Having子句总是与group by子句结合使用,这取决于分组。聚合函数可用于havingWhere也可以设置条件,但不依赖于分组字段,但不能使用聚合函数。
从“按学生标识列出的分数组”中选择“学生标识,合计(测试分数)”作为总测试分数,合计(测试分数)为400,按总测试分数排序desc
关于SQL分组函数group by和聚合函数(COUNT,MAX,MIN,AVG,SUM)的一些解释,本文就到这里了。有关SQL分组函数和聚合函数的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。