zoukankan      html  css  js  c++  java
  • 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];
  • 相关阅读:
    1 win10双系统安装ubuntu16.04和18.04(问题详细记录)
    一些操作记录备查
    SecureCRT中文乱码解决方法
    Oracle中的NVL函数
    本机不安装Oracle客户端,使用PL/SQL Developer连接远程数据库
    DevExpress DateEdit控件选择精确到秒
    DevExpress GridView 整理
    Linux 删除文件夹和文件的命令
    DevExpress之XtraReport 学习
    解决Visual Studio Community 2017工具栏中没有Report Viewer的问题
  • 原文地址:https://www.cnblogs.com/hjwq/p/9210262.html
Copyright © 2011-2022 走看看