ORACLE SQL 组函数【weber出品必属精品】
组函数:对一组数据进行加工,每组数据返回一个值
常用的组函数:count() avg() max() min() sum()
count()函数
1. count(*) :返回总共的行数,不去除NULL值
2. count(column):返回非NULL行的数量
SQL> select count(*) ,count(sal),count(comm) from emp; COUNT(*) COUNT(SAL) COUNT(COMM)
---------- ---------- -----------3.除了count(*)意外,其他的组函数都要去除NULL
SQL>select avg(sal),count(sal),sum(sal)/count(comm) average,count(sal)/count(nvl(comm,)) average2,count(comm) countnotnull from emp AVG(SAL) COUNT(SAL) AVERAGE AVERAGE2 COUNTNOTNULL
---------- ---------- ---------- ---------- ------------
2073.21429 7256.25 这里解释一下:avg()的除数是14,sum(sal)/count(comm)的除数则是4- DISTINCT()函数
SQL> select empno,ename,comm from emp; EMPNO ENAME COMM
---------- -------- ----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER SQL> select count(distinct comm) from emp;--返回唯一的非空comm的数量 COUNT(DISTINCTCOMM)
------------------- 这里有个小问题:
SQL> update emp set comm= where empno=
row updated.
SQL> select count(distinct comm ) from emp; COUNT(DISTINCTCOMM)
------------------- 说明:distinct只是将重复的字段给过滤掉了。并不能说明:返回唯一的非空comm的数量,这种说法只能是在comm非空且不重复的情况下才可以。 - GROUP BY 子句:创建分组数据
在SELECT语句中,没有使用分组函数的列必须在GROUP By子句中 SQL> select deptno,avg(sal) from emp;
select deptno,avg(sal) from emp
*
第 1 行出现错误:
ORA-00937: 不是单组分组函数GROUP BY后面的列可以不出现在 SELECT语句中
SQL> select avg(sal) from emp group by deptno; AVG(SAL)
----------
1566.66667
2375
2916.66667多个列上使用 GROUP BY 子句
SQL> select deptno,job,sum(sal) from emp group by deptno,job; DEPTNO JOB SUM(SAL)
------ --------- ----------
20 CLERK 1900
30 SALESMAN 5600
20 MANAGER 2975
30 CLERK 950
10 PRESIDENT 5000
30 MANAGER 2850
10 CLERK 1300
10 MANAGER 2450
20 ANALYST 7000 先按照deptno进行分组,deptno相同的再按照job进行分组- 分组函数的误用
1. 在SELECT 语句中,任何不在聚组函数中出现的列,必须在 GROUP BY 子句中
2. 不能在 WHERE子句中对组函数做出限定,使用 HAVING 子句来限定分组
SQL> select deptno,avg(sal) from emp where avg(sal)> group by deptno;
select deptno,avg(sal) from emp where avg(sal)> group by deptno
*
第 行出现错误:
ORA-: 此处不允许使用分组函数
正确用法:
SQL> select deptno,avg(sal) from emp group by deptno having avg(sal)>;
DEPTNO AVG(SAL)
---------- ---------- 2916.66667 - 组函数的嵌套
1. 组函数只能嵌套一层
2. 使用组函数嵌套,必须跟group by子句
错误的写法:
SQL> select max(avg(sal)) from emp;
select max(avg(sal)) from emp
*
ERROR at line :
ORA-: nested group function without GROUP BY 错误的写法:
SQL> select deptno,max(avg(sal)) from emp group by deptno;
select deptno, max(avg(sal)) from emp group by deptno
*
ERROR at line :
ORA-: not a single-group group function
因为select deptno查出来的是一列的内容,而组函数max()返回的只有一个值也错了、
正确的写法:
SQL> select max(avg(sal)) from emp group by deptno MAX(AVG(SAL))
-------------
2916.66667 - 子句执行的顺序
SELECT子句
FROM 子句
WHERE 子句
GROUP BY 子句
HAVING 子句 select deptno,job,sum(sal)
from emp
where comm is not null
group by deptno,job
having sum(sal)>
以上SQL语句的执行顺序 . from子句
. select子句
. where子句
. group by 子句
. 聚合运算:sum
. having子句
ORACLE SQL 组函数【weber出品必属精品】的更多相关文章
- 全世界最详细的图形化VMware中linux环境下oracle安装(一)【weber出品必属精品】
安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装 ...
- 全世界最详细的图形化VMware中linux环境下oracle安装(二)【weber出品必属精品】
<ORACLE 10.2.05版本的升级补丁安装> 首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入D ...
- ORACLE SQL单行函数(三)【weber出品必属精品】
16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED ...
- ORACLE SQL单行函数(一)【weber出品必属精品】
1.SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数 ...
- ORACLE SQL单行函数(二)【weber出品必属精品】
11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type -------------------------------------- ...
- 静默安装ORACLE【weber出品必属精品】
安装配置系统环境安装linux ,所有服务都不选择,只是选择安装开发工具,不要安装防火墙(当然也可以在后面关闭) 打开终端,执行如下命令,检查安装包,没有的都要安装 make, glibc, liba ...
- 创建存储过程和函数【weber出品必属精品】
一.什么是存储过程和函数 1. 是被命名的pl/sql块 2. 被称之为pl/sql子程序 3. 与匿名块类似,有块结构: 声明部分是可选的(没有declare关键字) 必须有执行部分 可选的异常处理 ...
- 全世界最详细的图形化VMware中linux环境下oracle安装(三)【weber出品必属精品】
数据库软件和数据库都建好了,基本上可以说完成90%的工作,但是美中不足的就是企业管理器还没有安装好,现在我们就开始安装企业管理器吧. 安装之前我们先将补丁给补上.补丁我们也是采用禁默安装.补丁:p83 ...
- linux删除ORACLE【weber出品必属精品】
关闭数据库 sqlplus / as sysdba shutdown abort 清除oracle软件 su - oracle cd $ORACLE_BASE rm -rf * rm -rf /etc ...
随机推荐
- 关于控制文件和redo log损坏的恢复
前段时间一朋友自己电脑上的开发测试用的数据库出了点问题,电脑操作系统是Win8,直接在Win8上安装了Oracle11g,后来系统自动升级到Win8.1,Oracle相关的服务全都不见了,想想把数据文 ...
- oracle数据库实验讲义-读书笔记(一)
1.激活锁定的用户alter user scott account unlock identified by tiger;2.使用内含脚本建立scott用户@%oracle_home%\rdbms\a ...
- Objective-C 引用计数:不讲用法,只说原理
本文所使用的源码为 objc4-647 和 CF-1153.18 实际上这是我本周实习周报的一部分,写的比较仓促,如有差错还请多多指正. 不讲用法,只说原理. 引用计数如何存储 有些对象如果支持使用 ...
- 多线程、多任务管理 简单demo
需求:假设多个任务需要执行,每个任务不是一时半会能完成(需要能看到中间执行状况): 多个任务 根据条件不同 可能需要不同的处理 分析: 多线程并发执行多任务: 对任务进行管理,追踪中间执行状态: 运用 ...
- FileStream操作文件读写
FileStream fsRead = new FileStream(@"C:\Users\Administrator\Desktop\u.html",FileMode.OpenO ...
- smarty练习: 设置试题及打印试卷
数据库表格:shiti, shititimu, timu, kemu, xuanxiang 根据科目设置一个可以添加试题的页面:(如下图) 具体的题目从数据库中查出并形成一张试卷的形式 考试试题设置: ...
- GetMemory 函数解析
GetMemory函数 代码1: void GetMemory(char *p){ p = (char*)malloc(100);}int main(int argc, char *argv[]){ ...
- Java Tips: 使用Pattern.split替代String.split
String.split方法很常用,用于切割字符串,split传入的参数是正则表达式,它的内部是每次都comiple正则表达式,再调用Pattern.split方法: public String[] ...
- Android4.0强制横屏竖屏
Android的启动默认是横屏或者竖屏我们的TV本来是横屏显示,但是有客户竟然要竖屏显示,昨天快下班收到的需求,竟然说7.19就要搞定.思路有2个,一个就是修改LCD的默认输出,但是这个不是我这个水平 ...
- POJ 3384 Feng Shui
http://poj.org/problem?id=3384 题意:给一个凸包,求往里面放两个圆(可重叠)的最大面积时的两个圆心坐标. 思路:先把凸包边往内推R,做半平面交,然后做旋转卡壳,此时得到最 ...