如何实现类似sum,count之类的统计函数

如何实现类似sum,count之类的统计函数,第1张

821 求和函数——SUM()求和函数SUM( )用于对数据求和,返回选取结果集中所有值的总和。语法如下。SELECT SUM(column_name) FROM table_name说明:SUM()函数只能作用于数值型数据,即列column_name中的数据必须是数值型的。实例1 SUM函数的使用从TEACHER表中查询所有男教师的工资总数。TEACHER表的结构和数据可参见521节的表5-1,下同。实例代码:SELECT SUM(SAL) AS BOYSALFROM TEACHERWHERE TSEX='男'运行结果如图81所示。图81 TEACHER表中所有男教师的工资总数实例2 SUM函数对NULL值的处理从TEACHER表中查询年龄大于40岁的教师的工资总数。实例代码:SELECT SUM(SAL) AS OLDSALFROM TEACHERWHERE AGE>=40运行结果如图82所示。图82 TEACHER表中所有年龄大于40岁的教师的工资总数当对某列数据进行求和时,如果该列存在NULL值,则SUM函数会忽略该值。822 计数函数——COUNT()COUNT()函数用来计算表中记录的个数或者列中值的个数,计算内容由SELECT语句指定。使用COUNT函数时,必须指定一个列的名称或者使用星号,星号表示计算一个表中的所有记录。两种使用形式如下。 COUNT(),计算表中行的总数,即使表中行的数据为NULL,也被计入在内。 COUNT(column),计算column列包含的行的数目,如果该列中某行数据为NULL,则该行不计入统计总数。1.使用COUNT()函数对表中的行数计数COUNT()函数将返回满足SELECT语句的WHERE子句中的搜索条件的函数。实例3 COUNT()函数的使用查询TEACHER表中的所有记录的行数。实例代码:SELECT COUNT() AS TOTALITEMFROM TEACHER运行结果如图83所示。图83 使用COUNT()函数对表中的行数计数在该例中,SELECT语句中没有WHERE子句,那么认为表中的所有行都满足SELECT语句,所以SELECT语句将返回表中所有行的计数,结果与521节的表5-1列出的TEACHER表的数据相吻合。如果DBMS在其系统表中存储了表的行数,COUNT()将很快地返回表的行数,因为这时,DBMS不必从头到尾读取表,并对物理表中的行计数,而直接从系统表中提取行的计数。而如果DBMS没有在系统表存储表的行数,将具有NOT NULL约束的列作为参数,使用COUNT()函数,则可能更快地对表行计数。 注意 COUNT()函数将准确地返回表中的总行数,而仅当COUNT()函数的参数列没有NULL值时,才返回表中正确的行计数,所以仅当受NOT NULL限制的列作为参数时,才可使用COUNT( )函数代替COUNT()函数。 2.使用COUNT( )函数对一列中的数据计数COUNT( )函数可用于对一列中的数据值计数。与忽略了所有列的COUNT()函数不同,COUNT( )函数逐一检查一列(或多列)中的值,并对那些值不是NULL的行计数。实例4 查询多列中所有记录的行数查询TEACHER表中的TNO列、TNAME列以及SAL列中包含的所有数据行数。实例代码:SELECT COUNT(TNO) AS TOTAL_TNO, COUNT(TNAME) AS TOTAL_TNAME, COUNT(SAL) AS TOTAL_SALFROM TEACHER运行结果如图84所示。图84 使用COUNT( )函数对一列中的数据计数可见,TNO列与TNAME列由于其中不含有NULL值,所以其计数与使用COUNT()函数对TEACHER表中的记录计数结果相一致,而SAL列由于其中有两行数据为NULL,所以这两列没有被计入在内,计数结果也就是8。3.使用COUNT( )函数对多列中的数据计数COUNT( )函数不仅可用于对一列中的数据值计数,也可以对多列中的数据值计数。如果对多列计数,则需要将要计数的多列通过连接符连接后,作为COUNT( )函数的参数。下面将结合具体的多列计数的实例,说明其使用过程。 说明 关于如何使用连接符连接多列可参见本书的72节。 实例5 使用COUNT( )函数对多列中的数据计数统计TEACHER表中的TNO列、TNAME列和SAL列中分别包含的数据行数,以及TNO列和TNAME列、TNAME列和SAL列一起包含的数据行数。实例代码:SELECT COUNT(TNO) AS TOTAL_TNO, COUNT(TNAME) AS TOTAL_TNAME, COUNT(SAL) AS TOTAL_SAL, COUNT(CAST(TNO AS VARCHAR(5)) + TNAME) AS T_NONAME, COUNT(TNAME + CAST(SAL AS VARCHAR(5))) AS T_NAMESALFROM TEACHER运行结果如图85所示。图85 使用COUNT( )函数对多列中的数据计数在进行两列的连接时,由于它们的数据类型不一致,因此要使用CAST表达式将它们转换成相同的数据类型。在721节已经讲过,如果在被连接的列中的任何一列有NULL值时,那么连接的结果为NULL,则该列不会被COUNT( )函数计数。 注意 COUNT( )函数只对那些传递到函数中的参数不是NULL的行计数。 4.使用COUNT函数对满足某种条件的记录计数也可以在SELECT语句中添加一些子句约束来指定返回记录的个数。实例6 使用COUNT函数对满足某种条件的记录计数查询TEACHER表中女教师记录的数目。实例代码:SELECT COUNT() AS TOTALWOMENFROM TEACHERWHERE TSEX='女'运行结果如图86所示。图86 使用COUNT函数对满足某种条件的记录计数这时结果为6而不是前面的所有记录10。之所以可以通过WHERE子句定义COUNT()函数的计数条件,这与SELECT语句各个子句的执行顺序是分不开的。前面已经讲过,DBMS首先执行FROM子句,而后是WHERE子句,最后是SELECT子句。所以COUNT()函数只能用于满足WHERE子句定义的查询条件的记录。没有包括在WHERE子句的查询结果中的记录,都不符合COUNT()函数。823 最大/最小值函数—MAX()/MIN()当需要了解一列中的最大值时,可以使用MAX()函数;同样,当需要了解一列中的最小值时,可以使用MIN()函数。语法如下。SELECT MAX (column_name) / MIN (column_name)FROM table_name说明:列column_name中的数据可以是数值、字符串或是日期时间数据类型。MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值。实例7 MAX()函数的使用查询TEACHER表中教师的最大年龄。实例代码:SELECT MAX (AGE) AS MAXAGEFROM TEACHER运行结果如图87所示。图87 TEACHER表中教师的最大年龄然而,在实际应用中得到这个结果并不是特别有用,因为经常想要获得的信息是具有最大年龄的教师的教工号、姓名、性别等信息。然而SQL不支持如下的SELECT语句。SELECT TNAME, DNAME, TSEX, MAX (AGE)FROM TEACHER因为聚合函数处理的是数据组,在本例中,MAX函数将整个TEACHER表看成一组,而TNAME、DNAME和TSEX的数据都没有进行任何分组,因此SELECT语句没有逻辑意义。同样的道理,下面的代码也是无效的。SELECT TNAME, DNAME, TSEX,SAL ,AGEFROM TEACHERWHERE AGE=MAX (AGE)解决这个问题的方法,就是在WHERE子句中使用子查询来返回最大值,然后再基于这个返回的最大值,查询相关信息。实例8 在WHERE子句中使用子查询返回最大值查询TEACHER表中年纪最大的教师的教工号、姓名、性别等信息。实例代码:SELECT TNAME, DNAME, TSEX, SAL, AGEFROM TEACHERWHERE AGE=(SELECT MAX (AGE) FROM TEACHER)运行结果如图88所示。图88 在WHERE子句中使用子查询返回最大值MAX()和MIN()函数不仅可以作用于数值型数据,也可以作用于字符串或是日期时间数据类型的数据。实例9 MAX()函数用于字符型数据如下面代码:SELECT MAX (TNAME) AS MAXNAMEFROM TEACHER运行结果如图89所示。图89 在字符串数据类型中使用MAX的结果可见,对于字符串也可以求其最大值。 说明 对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。 当然,对与日期时间类型的数据也可以求其最大/最小值,其大小排列就是日期时间的早晚,越早认为其值越小,如下面的实例。实例10 MAX()、MIN()函数用于时间型数据从COURSE表中查询最早和最晚考试课程的考试时间。其中COURSE表的结构和数据可参见本书61节的表6-1。实例代码:SELECT MIN (CTEST) AS EARLY_DATE, MAX (CTEST) AS LATE_DATEFROM COURSE运行结果如图810所示。图810 COURSE表中最早和最晚考试课程的考试时间可见,返回结果的数据类型与该列定义的数据类型相同。 注意 确定列中的最大值(最小值)时,MAX( )(MIN( ))函数忽略NULL值。但是,如果在该列中,所有行的值都是NULL,则MAX( )/MIN( )函数将返回NULL值。 824 均值函数——AVG()函数AVG()用于计算一列中数据值的平均值。语法如下。SELECT AVG (column_name)FROM table_name说明:AVG()函数的执行过程实际上是将一列中的值加起来,再将其和除以非NULL值的数目。所以,与SUM( )函数一样,AVG()函数只能作用于数值型数据,即列column_name中的数据必须是数值型的。实例11 AVG()函数的应用从TEACHER表中查询所有教师的平均年龄。实例代码:SELECT AVG (AGE) AS AVG_AGEFROM TEACHER运行结果如图811所示。图811 TEACHER表中所有教师的平均年龄在计算平均值时,AVG()函数将忽略NULL值。因此,如果要计算平均值的列中有NULL值,计算均值时,要特别注意。实例12 AVG()函数对NULL值的处理从TEACHER表中查询所有教师的平均工资。实例代码:SELECT AVG (SAL) AS AVG_AGE1,SUM(SAL)/COUNT() AS AVG_AGE2, SUM(SAL)/COUNT(SAL) AS AVG_AGE3 FROM TEACHER运行结果如图812所示。图812 TEACHER表中所有教师的平均工资可以发现得到了不同的结果。实际上,“AVG(SAL)”与“SUM(SAL)/COUNT(SAL)”语句是等价的。因为AVG(SAL)语句的执行过程实际上是将SAL列中的值加起来,再将其和(也就等价于SUM(SAL))除以非NULL值的数目(也就等价于COUNT(SAL))。而语句“SUM(SAL)/COUNT()”则不然,因为COUNT()返回的是表中所有记录的个数,而不管SAL列中的数值是否为NULL。 注意 AVG()函数在计算一列的平均值时,忽略NULL值。但是,如果在该列中,所有行的值都是NULL,则AVG()函数将返回NULL值。 如果不想对列中的所有值求平均,则可在WHERE子句中使用搜索条件来限制用于计算均值的行。实例13 在WHERE子句中使用搜索条件来限制用于计算均值的行从TEACHER表中查询所有计算机系教师的平均年龄。实例代码:SELECT AVG (AGE) AS AVGCOMPUTER_AGEFROM TEACHERWHERE DNAME = '计算机'运行结果如图813所示。图813 TEACHER表中所有计算机系教师的平均年龄当执行SELECT语句时,DBMS将表中的每行对WHERE子句中的搜索条件“DNAME = '计算机'”求值。只有那些搜索条件为True时,行中的AGE值才传到均值函数AVG (AGE)中。当然,除了显示表中某列的平均值,还可用AVG()函数作为WHERE子句的一部分。与前面介绍的MAX()函数一样,不能直接用于WHERE子句,必须以子查询的形式。实例14 AVG()函数作为WHERE子句中搜索条件的一部分从TEACHER表中查询所有年龄高于平均年龄的教师的信息。实例代码:SELECT FROM TEACHERWHERE AGE >= (SELECT AVG (AGE) FROM TEACHER)ORDER BY AGE运行结果如图814所示。图814 TEACHER表中所有年龄高于平均年龄的教师的信息825 聚合分析的重值处理前面介绍的5种聚合函数,可以作用于所选列中的所有数据(不管列中的数据是否有重置),也可以只对列中的非重值进行处理,即把重复的值只取一次进行聚合分析。当然,对于MAX()/MIN()函数来讲,重值处理意义不大。可以使用ALL关键字指明对所选列中的所有数据进行处理,使用DISTINCT关键字指明对所选列中的非重值数据进行处理。以AVG()函数为例,语法如下。SELECT AVG ([ALL/DISTINCT] column_name)FROM table_name说明:[ALL/DISTINCT]在缺省状态下,默认是ALL关键字,即不管是否有重值,处理所有数据。其他聚合函数的用法与此相同。 注意 Microsoft Access数据库不支持在聚合函数中使用DISTINCT关键字。 实例15 聚合分析的重值处理从TEACHER表中查询工资SAL列中存在的所有记录数。实例代码:SELECT COUNT(ALL SAL) AS ALLSAL_COUNTFROM TEACHER运行结果如图815所示。图815 TEACHER表中工资SAL列中存在的所有记录数当然,在代码中去除ALL关键字,也可以得到相同的结果。而如果从TEACHER表中,查询工资SAL列中存在的不同记录的数目,可采用如下代码。SELECT COUNT(DISTINCT SAL) AS DISTINCTSAL_COUNTFROM TEACHER运行结果如图816所示。图816 TEACHER表中SAL列存在的不同记录的数目对比两个结果,使用DISTINCT关键字后,工资SAL列中的重值并没有列入统计的范围之内。另外还要强调一点,在所有5种聚合函数中,除了COUNT()函数外,其他的函数在计算过程中都忽略NULL值,即把NULL值的行排除在外,不进行分析。826 聚合函数的组合使用前面介绍的实例中,聚合函数都是单独使用的。聚合函数也可以组合使用,即在一条SELECT语句中,可以使用多个聚合函数。实例16 使用多个聚合函数如下面的代码:SELECT COUNT() AS num_items, MAX(SAL) AS max_sal, Min(AGE) AS min_age, SUM(SAL)/COUNT(SAL) AS avg_sal, AVG(DISTINCT SAL) AS disavg_salFROM TEACHER运行结果如图817所示。图817 聚合函数的组合应用该例在一条SELECT语句中,几乎用到了所有的聚合函数。其中num_items为TEACHER表所有记录的条目,max_sal为TEACHER表中记录的最高工资,min_age为TEACHER表中记录的最小年龄,avg_sal为所有TEACHER表中的工资记录的平均值,disavg_sal为TEACHER表中所有不同的工资记录的平均值。

实现的方法和步骤如下:

1、首先,打开数据库连接客户端Navicat

 Premium并创建一个新的表结构,其中age列有意设置为varchar,如下图所示,然后进入下一步。

2、其次,完成上述步骤后,为刚刚创建的表创建一些数据,如下图所示,然后进入下一步。

3、接着,完成上述步骤后,当数据量较小时,可以使用sum()函数直接求和,因为其可以自动识别SQL中的字符串类型还是数字类型,如下图所示,然后进入下一步。

4、然后,以上适用于整数或少量数据。

 如果数据量太大并且准确性不适用,则可以考虑使用SQL CAST()和CONVERT()函数,如下图所示,然后进入下一步。

5、最后,看一下CONVERT()函数。

 该功能主要用于满足精度要求。 在这里,更改原始数据,并将age列更改为小数点以测试此功能,如下图所示。这样,问题就解决了。

1、SUM函数

SUM函数是一个求和函数。 可以将单个值、单元格引用或是区域相加,或者将三者的组合相加。语法:SUM(number1,[number2],)。number1 (必需参数)要相加的第一个数字。 该数字可以是 数字,或Excel中A1 之类的单元格引用或 A2:A8 之类的单元格范围。number2,这是要相加的第二个数字。

2、AVERAGE函数

AVERAGE函数是EXCEL表格中的计算平均值函数,在数据库中average使用简写avg。AVERAGE是返回参数的平均值(也做算术平均值)。例如,如果区域(区域:工作表上的两个或多个单元格。区域中的单元格可以相邻或不相邻)A1:A20包含数字,则函数=AVERAGE(A1:A20)将返回这些数字的平均值

3、MAX函数

函数max函数用于求向量或者矩阵的最大元素,或几个指定值中的最大值。MATLAB等高级编程语言中常用有三种形式:max(A)、max(A,B)、max(A,[],dim)。

4、COUNT函数

COUNT函数,用于Excel中对给定数据集合或者单元格区域中数据的个数进行计数,其语法结构为COUNT(value1,value2, )。COUNT函数只能对数字数据进行统计,对于空单元格、逻辑值或者文本数据将被忽略,因此可以利用该函数来判断给定的单元格区域中是否包含空单元格。

扩展资料:

函数COUNT在计数时,将把数值型的数字计算进去;但是错误值、空值、逻辑值、文字则被忽略。

如果参数是一个数组或引用,那么只统计数组或引用中的数字;数组中或引用的空单元格、逻辑值、文字或错误值都将忽略。具体如下:

1、如果参数为数字、日期或者代表数字的文本(例如,用引号引起的数字,如 "1"),则将被计算在内。

2、逻辑值和直接键入到参数列表中代表数字的文本被计算在内。

3、如果参数为错误值或不能转换为数字的文本,则不会被计算在内。

4、如果参数为数组或引用,则只计算数组或引用中数字的个数。不会计算数组或引用中的空单元格、逻辑值、文本或错误值。

5、若要计算逻辑值、文本值或错误值的个数,使用 COUNTA 函数。

6、若要只计算符合某一条件的数字的个数,使用 COUNTIF 函数或 COUNTIFS 函数。

参考资料:

百度百科-SUM函数

在用EXCEL中,我们常常用到函数,你知道该如何使用函数吗今天,学习啦小编就教大家在Excel中进行函数用法和讲解的 *** 作方法,不懂的朋友就要多多学习了。

Excel中的函数使用方法介绍

函数用法

1、函数名称:SUM

SUM是excel函数中最为常用的函数之一,sum函数分别出现在数学函数、全部函数两个类别中,默认的“常用函数”中也有。

sum函数的语法形式为: sum(number1,number2, )

例1、=sum(1,2,3) 结果为6,计算1、2、3三个数字的和;

例2、=sum(a1:a2) 结果为4,计算a1到a2单元格之和;

例3、=sum((1+2=3),(1+2),(a1:a2) 结果为8,因为(1+2=3)表达式的结果为真,在电脑中的结果为1,1+2表达式的结果3会被计算,a1到a2单元格之和4会被计算,所以最后的结果为8

2、函数名称:AVERAGE

主要功能:求出所有参数的算术平均值。

使用格式:AVERAGE(number1,number2,……)

参数说明:number1,number2,……:需要求平均值的数值或引用单元格(区域),参数不超过30个。

应用举例:在B8单元格中输入公式:=AVERAGE(B7:D7,F7:H7,7,8),确认后,即可求出B7至D7区域、F7至H7区域中的数值和7、8的平均值。

实例:=AVERAGE(100,70) 返回结果: 85

3、函数名称:IF

主要功能:根据对指定条件的逻辑判断的真假结果,返回相对应的内容。

使用格式:=IF(Logical,Value_if_true,Value_if_false)

参数说明:Logical代表逻辑判断表达式;Value_if_true表示当判断条件为逻辑“真(TRUE)”时的显示内容,如果忽略返回“TRUE”;Value_if_false表示当判断条件为逻辑“假(FALSE)”时的显示内容,如果忽略返回“FALSE”。

4、函数名称:MAX

语法:MAX(number1,number2,)

参数:Number1,number2,最多可以设置30个参数,参数可以是数值、单元格引用、单元格区域引用、定义的名称或返回数值的函数表达式。

在引用的单元格中,如果是字符串或逻辑值TRUE、FALSE,不参与计算。而将字符串输入到参数列表中,将返回错误值#Value,直接输入的TRUE,按1计算,直接输入的FALSE按0计算。

实例1:如果A1=71、A2=83、A3=76、A4=49、A5=92、A6=88、A7=96,则公式“=MAX(A1:A7)”返回96。

实例2:课时计算,一个教学班不足60人的按60人计算,超过60人的,每超过1人,课时增加0006,公式为

=1+MAX(A1-60,0)0006

5、函数名称:MIN

主要功能:求出一组数中的最小值。

使用格式:MIN(number1,number2……)

参数说明:number1,number2……代表需要求最小值的数值或引用单元格(区域),参数不超过30个。

应用举例:输入公式:=MIN(E44:J44,7,8,9,10),确认后即可显示出E44至J44单元和区域和数值7,8,9,10中的最小值。

6、EXCEL函数大全

数据库和清单管理函数

AVERAGE 返回选定数据库项的平均值

COUNT 计算数据库中包含数字的单元格的个数

COUNTA计算数据库中非空单元格的个数

DGET 从数据库中提取满足指定条件的单个记录

MAX 返回选定数据库项中的最大值

MIN 返回选定数据库项中的最小值

PRODUCT 乘以特定字段(此字段中的记录为数据库中满足指定条件的记录)中的值

STDEV 根据数据库中选定项的示例估算标准偏差

STDEVP 根据数据库中选定项的样本总体计算标准偏差

SUM 对数据库中满足条件的记录的字段列中的数字求和

SqlCommand comm1 = new SqlCommand(sql1, conn);

int i = (int)comm1ExecuteScalar();--如果是浮点型用float

然后赋值给textBox1Text=iToString();

以上就是关于如何实现类似sum,count之类的统计函数全部的内容,包括:如何实现类似sum,count之类的统计函数、数据库中价格字段是varchar类型怎样在sql语句中使用sum函数计算总和、什么是函数简述sum,average,max,count这四个函数的中文名称及参数用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10153639.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存