Oracle系列六 分组函数
- 分组函数作用于一组数据,并对一组数据返回一个值。
组函数类型
- 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系列六 分组函数的更多相关文章
- Oracle - 查询语句 - 分组函数
/* 分组函数 不能再select子句中出现普通的列,除非这个列在group by中给出 所有的空值都会被分为一组 分组过滤 SELECT FROM WHERE GROUPBY HAVING ORDE ...
- Oracle系列四 单行函数查询语句
单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以转换数据类型 可以嵌套 参数可以是一列或一个值 包含:字符,数值,日期,转换,通用 字符函数 1.大小写控制函数: ...
- PLSQL_基础系列02_分组函数GROUP BY / ROLLUP / CUBE(案例)
2014-11-30 Created By BaoXinjian
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用 ...
- Oracle索引梳理系列(六)- Oracle索引种类之函数索引
版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- .Net程序员学用Oracle系列(7):视图、函数、过程、包
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.视图 1.1.创建视图 2.函数 2.1.创建函数 2.2.调用函数 3.过程 3.1.创建过程 3.2.调用过程 4.包 ...
- .Net程序员学用Oracle系列(9):系统函数(上)
<.Net程序员学用Oracle系列:导航目录> 本文大纲 1.字符函数 1.1.字符函数简介 1.2.语法说明及案例 2.数字函数 2.1.数字函数简介 2.2.语法说明及案例 3.日期 ...
随机推荐
- 【Oracle RAC】Linux系统Oracle18c RAC安装配置详细记录过程(图文并茂)
本文Oracle 18c GI/RAC on Oracle Linux step-by-step 的安装配置步骤,同时也包含dbca 创建数据库的过程. 1. 关闭SELINUX,防火墙vi /etc ...
- 六、Linux_SSH服务器状态
一.保持Xshell连接Linux服务器状态 1.登录服务器后 cd /etc/ssh/ vim sshd_config 找到 ClientAliveInterval 0和ClientAliveCou ...
- vsftp网络服务
1. vsftp概述 FTP是File Transfer Protocol(文本传输协议)的简称,用于Internet上的文件的双向传输.使用FTP传输时,具有一定程度的危险性,因为数据在因特网上面是 ...
- Mariadb/MySQL生产环境的my.cnf配置示例
Mariadb/MySQL生产环境的my.cnf配置示例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.针对MySQL主程序mysqld定义参数[mysqld] 1>. ...
- javascript中 typeof和instanceof的区别
<一> js中typeof的用法进行了详细的汇总介绍 (1)返回一个变量的基本类型 回顾基本类型(number,string,boolean,null,undefined,object) ...
- Xenia and Weights(Codeforces Round #197 (Div. 2)+DP)
题目链接 传送门 思路 \(dp[i][j][k]\)表示第\(i\)次操作放\(j\)后与另一堆的重量差为\(k\)是否存在. 代码实现如下 #include <set> #includ ...
- Windows环境下安装和使用nginx1.16.0
nginx是一款开源的HTTP服务器和反向代理服务器,nginx可以作为Web服务器提供HTTP访问功能,类似于Apache.IIS等.目前nginx已经在国内外很多网站作为Web服务器或反向代理服务 ...
- 关于mysql数据库utf-8问题
1.bug的出现 我们正常使用utf-8类型来给我们的字段的字符编码,对于正常的都没有问题,例如姓名呀,性别年龄等,但是会遇到一个问题就是如果存储表情emoji则无法存入utf-8编码的字段 2.my ...
- js 键盘事件(onkeydown、onkeyup、onkeypress)
onkeypress 这个事件在用户按下并放开任何字母数字键时发生.系统按钮(例如,箭头键和功能键)无法得到识别. onkeyup 这个事件在用户放开任何先前按下的键盘键时发生. onkeydown ...
- Mysql注入绕过安全狗
转载请加原文链接:https://www.cnblogs.com/Yang34/p/12055052.html 微信公众号:信Yang安全.同步更新,欢迎关注.文末有二维码. 正好最近在搞注入,昨天现 ...