200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 关于SQL的学习记录(九 聚合函数与分组数据)

关于SQL的学习记录(九 聚合函数与分组数据)

时间:2023-09-11 09:12:15

相关推荐

关于SQL的学习记录(九 聚合函数与分组数据)

聚合函数与分组数据

聚合函数:

COUNT函数

使用COUNT函数可以统计表中的记录个数。

语法格式:

SELECT COUNT(字段名/*)FROM 表名[WHERE 条件表达式];#当字段名作为函数参数时,如果该字段中没有NULL值,则与星号(*)作函数参数的效果相同#而如果字段中含有NULL值,则统计个数时会排除含有NUL值的记录

SUM函数

使用SUM函数可以求某字段众多个记录的和

语法格式:

SELECT SUM(字段名)FROM 表名[WHERE 条件表达式];#该函数的参数必须是数值字段或者结果为数值的表达式

AVG函数

使用AVG函数可以求某字段的平均值。

语法格式:

SELECT AVG(字段名)FROM 表名[WHERE 条件表达式];#该函数的参数必须是数值字段或者结果为数值的表达式

MINMAX函数

使用MINMAX函数可以求指定字段中的最大值、最小值。

语法格式:

SELECT MIN(字段名)FROM 表名[WHERE 条件表达式];SELECT MAX(字段名)FROM 表名[WHERE 条件表达式];#MIN和MAX两个函数可以用于文本类型、数值类型和日期时间类型的字段上#这两个函数都忽略含有MULL值的记录

统计汇总相异值(不同值)记录

统计某个字段中出现过的值(如:某一表中的地区字段中出现过几个地区)可以用`DISTINCT``关键字统计

语法格式

SELECT COUNT(DISTINCT 字段名)FROM 表名[WHERE 条件表达式];

除了COUNT函数可以使用DISTINCT外,上面介绍的4个聚合函数中也可以使用DISTINCT关键字

聚合函数对NULL值的处理(总结)COUNT函数对NULL值的处理

如果COUNT函数的参数为星号〔*),则统计所有记录的个数。

而如果参数为某字段,不统计含NULL值的记录个数,则应加上DISTINCT关键字。SUMAVG函数对NULL值的处理

这两个函数忽略NULL值的存在,就好象该条记录不存在一样。MAXMIN函数对NULL值的处理

这两个函数同样忽略NULL值的存在。

数据分组:

将表内容按列分组

GROUP BY子句用来分组数据,首先,必须清楚一件事情,分组是根据指定字段的不同值划分的。例如,性别字段中只有2种值,因此,如果按性别字段分组数据就会产生两个组,又例如,假设所属院系字段值中有5种不同的值,则如果按所属院系分组就会产生五个组等。

语法格式:

SELECT 字段名FROM 表名GROUP BY 字段名|表达式(SELECT子句中出现过);#GROUP BY子句中的字段名必须在SELECT子句中的字段名出现过,否则会报错#且SELECT子句中的字段名最好不要使用*,若要使用则GROUP BY子句中须列出表中所有的字段名,否则会报错#分组时是按照GROUP BY子句后的字段名组合分组的,只有其后的字段名中的数据都相同才会别分为一组

聚合函数与分组配合使用

将数据分成小组的的很大原因是用于统计汇总,而统计汇总通常都要使用聚合函数,因此,聚合函数和分组经常被人们放在一起使用。

语法格式:

SELECT 使用了聚合函数的字段名FROM 表名GROUP BY 字段名|表达式(SELECT子句中出现过);

查询数据的直方图

直方图是表示不同实体之间数据相对分布的条状图。在一个查询语句中使用GROUP BY子句,不仅可以查询数据,又可以格式化数据生成图表。

语法格式:

SELECT 字段名, RAPD(str1,length,str2)FROM 表名GROUP BY 字段名|表达式(SELECT子句中出现过);#其中RAPD函数中str1是第一个字符串,length是结果字符串的长度,str2是一个填充字符串#如果str1的长度没有length那么长,则使用str2填充;如果str1的长度大于length,则截断

排序分组结果

使用ORDER BY子句排序分组结果,放在GROUP BY子句的后面

语法格式:

SELECT 字段名FROM 表名GROUP BY 字段名|表达式(SELECT子句中出现过)ORDER BY 字段名 [ASC|DESC];

反转查询结果

在MySQL或sQL Server环境中,CASE表达式和GROUP BY子句联合使用会得到很多有用的数据表示,其中就包括反转查询结果的数据表示

语法格式:

SELECT 字段名,COUNT(CASE 表达式 THEN 1 ELSE NULL END),...FROM 表名GROUP BY 字段名|表达式(SELECT子句中出现过);

使用HAVING子句设置分组查询结果

HAVING子句用于设置分组查询条件,即过滤不需要的分组。该子句通常和GROUP BY子句一起使用。

单独使用HAVING子句没有太大的意义。

语法格式:

SELECT 字段名FROM 表名GROUP BY 字段名|表达式(SELECT子句中出现过)HAVING 条件表达式(如:字段名 IN 集合)ORDER BY 字段名 [ASC|DESC];

HAVING子句与WHERE子句的区别

HAVING子句与WHERE子句之后都写条件表达式,而且都会根据条件表达式的结果筛选数据。

但它们是有区别的,主要区别汇总如下:

HAVING子句用于筛选组,而WHERE子句用于筛选记录。

HAVING子句中可以使用聚合函数,而WHERE子句中不能使用聚合函数。

HAVING子句中不能出现既不被GROUP BY子句包含,又不被聚合函数包含的字段。而WHERE子句中可以出现任意的字段。

HAVING子句总是和GROUP BY子句配合使用,而WHERE子句可以不用任何子句的配合。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。