SQL—分组函数

    xiaoxiao2022-07-14  144

    SQL—分组函数

    日期:2019.05.23 作者:chj

    什么是分组函数

    分组函数作用于一组数据,并对一组数据返回一个值

    分组函数类型

    AVG 平均值COUNT 统计值MAX 最大值MIN 最小值SUM 合计STDDEV 标准差(用的少)VARIANCE 方差(用的少)

    AVG、MAX、MIN、SUM函数的使用方法:

    select avg(sal),max(sal),min(sal),sum(sal) from emp; AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) ---------- ---------- ---------- ---------- 2073.21429 5000 800 29025

    COUNT函数的使用方法: count(*):查看表格中非空值的行数

    select count(*) from emp; COUNT(*) ---------- 14

    count(comm):查看comm列中的非空值行数:

    select count(comm) from emp; COUNT(COMM) ----------- 4

    分组函数与空值

    分组函数忽略空值: emp表中有14人,因为分组函数直接忽略空值,所以可以计算出comm的综合,计算平均值时也只是对4个人做了计算: select sum(comm),avg(comm) from emp; SUM(COMM) AVG(COMM) ---------- ---------- 2200 550 nvl函数使分组函数无法忽略空值: select sum(nvl(comm,0)),avg(nvl(comm,0)) from emp; SUM(NVL(COMM,0)) AVG(NVL(COMM,0)) ---------------- ---------------- 2200 157.142857

    分组数据

    group by 子句语法

    将信息表分成更小的组。这可以通过使用 group by 子句来实现。group by子句的作用:将表中的数据分成若干组。在 select 列表中所有未包含在组函数中的列都应该包含在 group by 子句中。

    使用单列分组

    例:查询公司各部门的员工个数 SQL> select deptno,count(*) from emp group by deptno; DEPTNO COUNT(*) ---------- ---------- 30 6 20 5 10 3

    使用单列分组

    例:查询各部门分别有什么工作岗位,各岗位有几个人 select deptno,job,count(*) from emp group by deptno,job; DEPTNO JOB COUNT(*) ---------- --------- ---------- 20 CLERK 2 30 SALESMAN 4 20 MANAGER 1 30 CLERK 1 10 PRESIDENT 1 30 MANAGER 1 10 CLERK 1 10 MANAGER 1 20 ANALYST 2

    having 子句用法

    where子句和 having子句的区别 having子句过滤组,where子句过滤记录例:查询各部门的平均薪水及部门编号,要求只有员工姓名中包含‘A’才参与统计,只列出平均薪水>1500的,按照平均薪水降序排列。 select deptno,avg(sal) from emp where ename like '%A%' group by deptno having avg(sal)>1500 order by 2 desc; DEPTNO AVG(SAL) ---------- ---------- 10 2450 30 1580

    嵌套组函数

    例:从emp表中筛选平均工资最高的部门 select max(avg(sal)) from emp group by deptno; MAX(AVG(SAL)) ------------- 2916.66667
    最新回复(0)