关于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子句可以不用任何子句的配合。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值