统计函数与分组查询

本文详细介绍了SQL中的分组统计查询,包括统计函数如COUNT()、SUM()、AVG()、MAX()、MIN()的使用,以及分组统计的概念和限制。重点讲解了GROUP BY子句的使用,以及在分组后如何使用HAVING子句进行数据过滤。此外,还通过实例解析了多字段分组和外连接的应用,以及WHERE与HAVING子句的区别。
摘要由CSDN通过智能技术生成

1、分组统计查询

1.1 统计函数(分组函数)

  在之前学习过一个COUNT()函数,此函数的功能是用于统计一张表中的数据量,那么实际上这就属于一种统计函数,在SQL语法中,定义了五个常用的统计函数:COUNT()、SUM()、AVG()、MAX()、MIN()。

范例:要求查询出公司总人数、每月支付的总工资、以及公司的平均工资、最高工资、最低工资。

SELECT COUNT(*),SUM(sal),AVG(sal),MAX(sal),MIN(sal) FROM emp;

范例:求出公司雇佣雇员之中,最早和最晚的雇佣日期。

SELECT MIN(hiredate),MAX(hiredate) FROM emp;

  针对于以上的几个统计函数,还有一些非常重要的说明:
说明一: 给出的五个函数之中,如果内统计的数据表之中没有任何数据存在,那么只有COUNT()函数返回数据。

SELECT COUNT(*),SUM(sal),AVG(sal),MAX(sal),MIN(sal) FROM bonus;

  发现只有 COUNT() 函数返回了0,其他的函数返回的数据都是NULL,所以得出结论:COUNT()函数不管表中是否有内容,永远都会有一个具体的数据返回。

说明二: 关于COUNT()函数使用的问题
  在现在已知使用的 COUNT() 函数采用的方式 “COUNT(*)” , 实际上也可以使用 “COUNT(字段)” 来完成,例如,现在观察如下代码。

SELECT COUNT(*),COUNT(empno) FROM emp;

面试题: 请说出”COUNT(*)”,”COUNT(DISTINCT 字段)”还有”COUNT(字段)”的区别?

SELECT COUNT(*),COUNT(empno),COUNT(DISTINCT job),COUNT(comm) FROM emp;

这里写图片描述

  COUNT(*):可以直接准确的返回表中的数据;
  COUNT():如果此字段上的内容不为NULL,其结果与COUNT()一致,如果有NULl数据,则NULL不统计;
  COUNT(DISTINCT 字段):重复的数据不统计。

1.2、分组统计

  在学习分组统计之前,首先来思考一个问题,什么情况下可能会出现分组的问题?
  例如:生活之中,男女厕所是分开的,如果说现在要求男生和女生个一组,按照每个部门分组进行拔河比赛。所以所谓的分组一定是要求有重复,如果换回到数据库之中,就意味者列上存在重复。但是也不排除一个人一组,只是这样做的意义不大。但是分组之后就应该可以进行统计操作了,就可以使用统计函数了。
  如果要想在SQL之中实现分组,可以使用如下语法完成,增加一个 GROUP BY 子句。

SELECT [DISTINCT] 列 [别名] | 统计函数 
FROM 表名称 [别名], 表名称 [别名], .....
[WHERE 条件(s)]
[GROUP BY 分组字段]
[ORDER BY 字段 [ASC | DESC], 字段 [ASC | DESC], ....]

范例:要求查询出每种职位的雇佣人数、平均工资,应该按照 job 分组。

SELECT job,COUNT(empno),AVG(sal)
FROM emp
GROUP BY job;

这里写图片描述

范例:按照部门编号分组,求出每个部门的人数,平均工资,最高及最低工资
。应该按照deptno分组。

SELECT deptno,COUNT(deptno),AVG(sal),MAX(sal),MIN(sal) 
FROM emp 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值