• ORACLE学习-4.分组函数


    学习本节会遇到很多例子,想要查看例子中用到表结构,请访问:表结构参考

    什么是分组函数:分组函数作用于一组数据,并对一组数据返回一个值。

    组函数有:平均值(AVG) 、总计(COUNT) 、最大值(MAX) 、最小值(MIN) 、方差(STDDEV)、求和(SUM)

    分组函数的语法:

    SELECT    [column,] group_function(column), ...
    FROM        table
    [WHERE    condition]
    [GROUP BY    column]
    [ORDER BY    column];

    一.分组函数的使用:

    1.可以对数值型数据使用AVG 和 SUM 函数,例如:

    SELECT AVG(salary), MAX(salary),
                  MIN(salary), SUM(salary)
    FROM   employees
    WHERE  job_id LIKE '%REP%';

    2.可以对任意数据类型的数据使用 MIN 和 MAX 函数。

    SELECT MIN(hire_date), MAX(hire_date)
    FROM      employees;

    3.COUNT(*) 返回表中记录总数,适用于任意数据类型。

    SELECT COUNT(*)
    FROM      employees
    WHERE  department_id = 50;

    4.COUNT(expr) 返回expr不为空的记录总数。

    SELECT COUNT(commission_pct)
    FROM   employees
    WHERE  department_id = 50;

    5.组函数忽略空值,会统计出不为空的数据。

    SELECT AVG(commission_pct)
    FROM   employees;

    6.NVL函数使分组函数无法忽略空值。

    SELECT AVG(NVL(commission_pct, 0))
    FROM   employees;

    7.COUNT(DISTINCT expr)返回expr非空且不重复的记录总数;

    SELECT COUNT(DISTINCT department_id)
    FROM   employees;

    二.分组数据,GROUP BY 子句语法

    1.可以使用GROUP BY子句将表中的数据分成若干组,WHERE一定放在FROM后面,语法格式:

    SELECT    column, group_function(column)
    FROM        table
    [WHERE    condition]
    [GROUP BY    group_by_expression]
    [ORDER BY    column];

    2.在SELECT 列表中所有未包含在组函数中的列都应该包含在GROUP BY 子句中,但是包含在 GROUP BY 子句中的列不必包含在SELECT 列表中。

    SELECT   department_id, AVG(salary)
    FROM     employees
    GROUP BY department_id ;
    
    SELECT   AVG(salary)
    FROM     employees
    GROUP BY department_id ;

    3.group by可以使用多个列进行分组,例如:

    SELECT   department_id dept_id, job_id, SUM(salary)
    FROM     employees
    GROUP BY department_id, job_id ;

    4.不能在 WHERE 子句中使用组函数。可以在 HAVING 子句中使用组函数。

    非法的:
    SELECT   department_id, AVG(salary)
    FROM     employees
    WHERE    AVG(salary) > 8000
    GROUP BY department_id;
    
    正确的:
    SELECT   department_id, AVG(salary)
    FROM     employees
    HAVING    AVG(salary) > 8000
    GROUP BY department_id;

    三.过滤分组: HAVING 子句

    使用 HAVING 过滤分组:
    1. 行已经被分组。
    2. 使用了组函数。
    3. 满足HAVING 子句中条件的分组将被显示。

    语法格式:

    SELECT    column, group_function
    FROM        table
    [WHERE    condition]
    [GROUP BY    group_by_expression]
    [HAVING    group_condition]
    [ORDER BY    column];

    例如:

    SELECT   department_id, MAX(salary)
    FROM     employees
    GROUP BY department_id
    HAVING   MAX(salary)>10000 ;

    组函数是可以嵌套的,例如:显示各部门平均工资的最大值:

    SELECT   MAX(AVG(salary))
    FROM     employees
    GROUP BY department_id;

    总结:

    这一节主要学习了:

    使用组函数:avg(),sum(),max(),min(),count()
    在查询中使用 GROUP BY 子句。
    在查询中使用 HAVING 子句。

    SELECT    column, group_function(column)
    FROM        table
    [WHERE    condition]
    [GROUP BY    group_by_expression]
    [HAVING    group_condition]
    [ORDER BY    column];
  • 相关阅读:
    PuTTY 私钥'putty/sshdss.c' 多个信息泄露漏洞
    PuTTY DSA签名远程缓冲区溢出漏洞(CVE-2013-4207)
    Apache CloudStack多个跨站脚本漏洞(CVE-2013-2136)
    phpMyAdmin 完整路径泄露漏洞3
    程序员必知的 七 种软件架构模式!
    【扩展知识】数据结构之动态内存管理机制!
    新年新气象,拼多多退出春晚红包合作,由抖音补位!
    【新年第一个程序】三子棋小游戏(C语言数组实现)
    编程开发中你必须了解的内存知识!从分配到使用直至出现Bug!
    C语言小写转大写,小写字母转换成大写字母!
  • 原文地址:https://www.cnblogs.com/hjwq/p/9210262.html
Copyright © 2020-2023  润新知