SQL分组函数groupby和聚合函数(COUNT、MAX、
MIN、AVG、SUM)的⼏点说明
SQL中分组函数和聚合函数之前的⽂章已经介绍过,单说这两个函数有可能⽐较好理解,分组函数就是group by,聚合函数就是COUNT、MAX、MIN、AVG、SUM。
拿上图中的数据进⾏解释,假设按照product_type这个字段进⾏分组,分组之后结果如下图。
SELECT product_type from productgroup by product_type
从图中可以看出被分为了三组,分别为厨房⽤具、⾐服和办公⽤品,就相当于对product_type这个字段进⾏了去重,确实group by函数有去重的作⽤。
SELECT DISTINCT product_type from product
假设分组之后,我想看⼀下价格,也就是sale_price这个字段的值,按照如下这个写法,会报如下错误。
SELECT product_type,sale_price from productgroup by product_type
这是为什么呢?原表按照product_type分组之后,厨房⽤具对应4个值,⾐服对应2个值,办公⽤品对应2
个值,这就是在取sale_price这个字段的时候为什么报错了,⼀个空格中不能填⼊多个值,这时候就可以⽤聚合函数了,⽐如求和,求平均,求最⼤最⼩值,求⾏数。聚合之后的值就只有⼀个值了。
SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from productgroup by product_type
对于多个字段的分组,其原理是⼀样的。从上述中记住两点:分组去重和分组聚合。
distinct只是为了去重,⽽group by是为了聚合统计的。
两者都有去重的效果,但是执⾏的效率不⼀样
单个字段去重
--DISTINCTSELECT distinct product_type from product--GROUP BYselect product_type from productGROUP
BY product_type
--DISTINCTSELECT distinct product_name, product_type from product--GROUP BYselect product_name,
product_type from productGROUP BY product_name, product_type
select <;列名1>,<;列名2>from<;表名>where 查询条件group by 分组类别having 对分组结果指定条件order by <;列名>(desc)limit 数字
SQL语⾔的运⾏顺序,先执⾏上图中的第⼀步,然后再执⾏select⼦句,最后对结果进⾏筛选。distinct是在select⼦句中,⽽group by在第⼀步中,所以group by去重⽐distinct去重在效率上要⾼。
sql中聚合函数和分组函数_SQL选择计数聚合函数-语法⽰例解释
The COUNT operator is usually used in combination with a GROUP BY clause. It is one of the SQL “aggregate” functions, which include AVG (average) and SUM.
COUNT运算符通常与GROUP BY⼦句结合使⽤。它是SQL“聚合”功能之⼀,其中包括AVG(平均)和SUM。
This function will count the number of rows and return that count as a column in the result set.
此函数将对⾏数进⾏计数,并将该计数作为列返回到结果集中。
Here are examples of what you would use COUNT for:
以下是将COUNT⽤于以下⽤途的⽰例:
Counting all rows in a table (no group by required)
计算表中的所有⾏(不需要按组)
Counting the totals of subsets of data (requires a Group By section of the statement)
计算数据⼦集的总数(需要语句的“分组依据”部分)
For reference, here is the current data for all the rows in our example student database.
作为参考,这是⽰例学⽣数据库中所有⾏的当前数据。
select studentID, FullName, programOfStudy, sat_score from student; -- all records with fields of interest
This SQL statement provides a count of all rows. Note that you can give the resulting COUNT column a name
using “AS”.
该SQL 语句提供所有⾏的计数。 请注意,您可以使⽤“ AS”为所得的COUNT 列命名。
select count(*) AS studentCount from student; -- count of all records
Here we get a count of students in each field of study.
在这⾥,我们得到了每个学习领域的学⽣⼈数。
select studentID, FullName, count(*) AS studentCount from the student table with a group by programOfStudy;
Here we get a count of students with the same SAT scores.
在这⾥,我们得到了具有相同SAT 分数的学⽣⼈数。
select studentID, FullName, count(*) AS studentCount from the student table with a group by sat_score;
Here is an example using the campaign funds table. This is a sum total of the dollars in each transaction and the number of contributions for each political party during the 2016 US Presidential Campaign.
这是使⽤⼴告系列资⾦表的⽰例。 这是2016年美国总统⼤选期间每笔交易的总⾦额和每个政党的捐款额。
123
select Specific_Party, Election_Year, format(sum(Total_$),2) AS contribution$Total, count(*) AS numberOfContributions
现场直播的视频手机上怎么保存from combined_party_data
group by Specific_Party,Election_Year
As with all of these things there is much more to it, so please see the manual for your database manager and have fun trying different tests yourself.
关于所有这些事情,还有很多事情要做,所以请参阅数据库管理员⼿册,并尝试⾃⼰进⾏不同的测试,这很有趣。sql 语句聚合函数和分组操作的注意事项
group by 可以根据给定数据列的每个成员对查询结果进⾏分组统计,最终得到⼀个汇总表。
group by ⼏个⽐较重要的约束:
(1)select 字句中的列名和having 或where 中的列名必须为分组列或列函数.列函数对于group by 字句定义的每个组返回⼀个结果
(2)group by ⼀般和聚合函数⼀使⽤才有意义,⽐如count,sum,avg 等,使⽤group by 的两个要素:
(3)出现在select 后⾯的字段,要么是聚合函数中的,要么是group by 中的.
(4)要筛选结果,可以先使⽤where 再⽤group by 或者先⽤group by 再⽤having
第(4)项根据各个数据库不同不⼀定都能适⽤,因此最好不要这样⽤,⽼⽼实实⽤having
SQL 聚合函数和分组数据语法及概述
(⼀)聚合函数是指对列上的数据进⾏操作,起到统计的作⽤。前⾯的函数都是最⼀⾏记录进⾏操作得到的数据,包括前⾯的⽇期函数、数学函数、字符函数、转换函数以及条件判断函数。
mysql菜鸟教程聚合函数常⽤的聚合函数有:count 、sum 、avg 、max 、min 。这5个函数个起到统计记录数、求和、求平均值、求最⼤值、最⼩值的作⽤。
Count :count 函数对查询的数据统计记录数量,这个函数不对字段值为NULL 的值进⾏统计,也就是说某个查询的字段有NULL 值,则NULL 值的数量会被减除,这样就可以不对NULL 设置查询条件了。
如果要对NULL 值设置查询,则可以⽤WHERE 字段 IS NULL 来作为条件。
Sum:sum函数求和,只能对数值型数据操作,也会忽略NULL值。举例:
Select sum(考试成绩) as 计算机总成绩
From score
发卡网源码搭建Where 课号 in (select 课号 from course where 课名=”计算机”)
Avg:求平均值,参数也必须为数值型字段名或者结果为数值的表达式。
Max、min:这两个函数求最⼤值和最⼩值,但是不能放到WHERER中以及SELECT⼦句的字段名位置上。
例: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,)…) 正确。
注:5个函数都可以使⽤distinct统计不重复的值:
Select count(distinct(课程)) as 课程数量 from 课程表
Access和mysql不能将distinct放置到参数中,解决⽅法:查询distinct保存为新表INTO语句,然后再使⽤count。
(⼆)数据分组是指将数据表中的数据按照指定字段的不同值分为很多组,使⽤group by ⼦句进⾏操作。
Group by通常不直接查询所有字段并且分组,group by和select后分组字段和查询字段通常⼀致。因为select * from y group by x 会产⽣错误,通常对某个字段分组并且利⽤聚合函数计算分组得到的值。
聚合函数和分组的组合并设置查询条件:可以对⼀个字段分组并且设定条件,这样得到的结果将会是计算分组并且满⾜条件的值。例:
查询各个所属院系中所有男⽣的值:
Select 所属院系,count(*) as 男⽣⼈数from student where 性别='男' group by 所属院系
查询直⽅图:利⽤replicate()函数,将分组得到的数据作为次数,重复⼀个设置的符号。
shell脚本需要编译吗排序查询结果:order by语句,ASC、DESC 位于group by之后
Case表达式和group by的结合:
Select 所属院系,count(case初学者熟悉键盘
When 性别='男' then 1
Else null
功勋的拼音End ) as 男⽣⼈数,
count(case
When 性别='⼥' then 1
Else null
End ) as ⼥⽣⼈数
From student group by 所属院系
Hanving⼦句设置分组group by的分组查询条件。
Having⼦句总是和group by⼦句结合使⽤,依赖于分组,可以在having中使⽤聚合函数;where 也可以设定条件,但是不依赖于分组的字段,但是不能使⽤聚合函数。
Select 学号,sum(考试成绩) as 考试总成绩 from score group by 学号 having sum(考试成绩)>400 order by 考试总成绩 desc
到此这篇关于SQL分组函数group by和聚合函数(COUNT、MAX、MIN、AVG、SUM)的⼏点说明的⽂章就介绍到这了,更多相关SQL分组函数和聚合函数内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论