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

组函数类型

  • AVG
  • COUNT
  • MAX
  • MIN
  • STDDEV
  • SUM

组函数语法

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

AVG(平均值)和 SUM (合计)函数

  • 可以对数值型数据使用AVG 和 SUM 函数。
SELECT
AVG(salary),
MAX(salary),
MIN(salary),
SUM(salary)
FROM
employees
WHERE
job_id LIKE '%REP%';

COUNT(计数)函数

  • COUNT(*) 返回表中记录总数,适用于任意数据类型。
SELECT
COUNT(*)
FROM
employees
WHERE
department_id = 50;

  • COUNT(expr) 返回expr不为空的记录总数。
SELECT
COUNT(commission_pct)
FROM
employees
WHERE
department_id = 50;

组函数与空值

  • 组函数忽略空值。

示例:

SELECT
AVG(commission_pct)
FROM
employees;

示例

SELECT
AVG(commission_pct),
SUM(commission_pct) / 107,
SUM(commission_pct) / COUNT(commission_pct)
FROM
employees

在组函数中使用NVL函数

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

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

DISTINCT 关键字

  • COUNT(DISTINCT expr)返回expr非空且不重复的记录总数
SELECT
COUNT(DISTINCT department_id)
FROM
employees;

分组数据

  • 可以使用GROUP BY子句将表中的数据分成若干组
SELECT    column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
  • 明确:WHERE一定放在FROM后面

GROUP BY 子句

  • 在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中。
SELECT
department_id,
AVG(salary)
FROM
employees
GROUP BY
department_id;

  • 包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
SELECT
AVG(salary)
FROM
employees
GROUP BY
department_id;

在GROUP BY子句中包含多个列
示例

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

非法使用组函数

  • 所有包含于SELECT 列表中,而未包含于组函数中的列都必须包含于 GROUP BY 子句中。
SELECT department_id, COUNT(last_name)
FROM employees;
SELECT department_id, COUNT(last_name)
GROUP BY 子句中缺少列
  • 不能在 WHERE 子句中使用组函数。
  • 可以在 HAVING 子句中使用组函数。
SELECT
department_id,
AVG(salary)
FROM
employees
WHERE
AVG(salary) > 8000
GROUP BY
department_id; WHERE 子句中不能使用组函数

过滤分组: HAVING 子句

使用 HAVING 过滤分组:

  • 行已经被分组。
  • 使用了组函数。
  • 满足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;

Oracle系列六 分组函数的更多相关文章

  1. Oracle - 查询语句 - 分组函数

    /* 分组函数 不能再select子句中出现普通的列,除非这个列在group by中给出 所有的空值都会被分为一组 分组过滤 SELECT FROM WHERE GROUPBY HAVING ORDE ...

  2. Oracle系列四 单行函数查询语句

    单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数: ...

  3. PLSQL_基础系列02_分组函数GROUP BY / ROLLUP / CUBE(案例)

    2014-11-30 Created By BaoXinjian

  4. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

  5. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

    花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...

  6. Oracle索引梳理系列(六)- Oracle索引种类之函数索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  7. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

  8. .Net程序员学用Oracle系列(7):视图、函数、过程、包

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.视图 1.1.创建视图 2.函数 2.1.创建函数 2.2.调用函数 3.过程 3.1.创建过程 3.2.调用过程 4.包 ...

  9. .Net程序员学用Oracle系列(9):系统函数(上)

    <.Net程序员学用Oracle系列:导航目录> 本文大纲 1.字符函数 1.1.字符函数简介 1.2.语法说明及案例 2.数字函数 2.1.数字函数简介 2.2.语法说明及案例 3.日期 ...

随机推荐

  1. 【Oracle RAC】Linux系统Oracle18c RAC安装配置详细记录过程(图文并茂)

    本文Oracle 18c GI/RAC on Oracle Linux step-by-step 的安装配置步骤,同时也包含dbca 创建数据库的过程. 1. 关闭SELINUX,防火墙vi /etc ...

  2. 六、Linux_SSH服务器状态

    一.保持Xshell连接Linux服务器状态 1.登录服务器后 cd /etc/ssh/ vim sshd_config 找到 ClientAliveInterval 0和ClientAliveCou ...

  3. vsftp网络服务

    1. vsftp概述 FTP是File Transfer Protocol(文本传输协议)的简称,用于Internet上的文件的双向传输.使用FTP传输时,具有一定程度的危险性,因为数据在因特网上面是 ...

  4. Mariadb/MySQL生产环境的my.cnf配置示例

    Mariadb/MySQL生产环境的my.cnf配置示例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.针对MySQL主程序mysqld定义参数[mysqld]  1>. ...

  5. javascript中 typeof和instanceof的区别

    <一> js中typeof的用法进行了详细的汇总介绍 (1)返回一个变量的基本类型 回顾基本类型(number,string,boolean,null,undefined,object) ...

  6. Xenia and Weights(Codeforces Round #197 (Div. 2)+DP)

    题目链接 传送门 思路 \(dp[i][j][k]\)表示第\(i\)次操作放\(j\)后与另一堆的重量差为\(k\)是否存在. 代码实现如下 #include <set> #includ ...

  7. Windows环境下安装和使用nginx1.16.0

    nginx是一款开源的HTTP服务器和反向代理服务器,nginx可以作为Web服务器提供HTTP访问功能,类似于Apache.IIS等.目前nginx已经在国内外很多网站作为Web服务器或反向代理服务 ...

  8. 关于mysql数据库utf-8问题

    1.bug的出现 我们正常使用utf-8类型来给我们的字段的字符编码,对于正常的都没有问题,例如姓名呀,性别年龄等,但是会遇到一个问题就是如果存储表情emoji则无法存入utf-8编码的字段 2.my ...

  9. js 键盘事件(onkeydown、onkeyup、onkeypress)

    onkeypress 这个事件在用户按下并放开任何字母数字键时发生.系统按钮(例如,箭头键和功能键)无法得到识别. onkeyup 这个事件在用户放开任何先前按下的键盘键时发生. onkeydown ...

  10. Mysql注入绕过安全狗

    转载请加原文链接:https://www.cnblogs.com/Yang34/p/12055052.html 微信公众号:信Yang安全.同步更新,欢迎关注.文末有二维码. 正好最近在搞注入,昨天现 ...