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 ...
随机推荐
- SignalR2.0开发实例之——创建房间聊天
SignalR作为一个强大的集线器,已经在hub里面集成了Gorups,也就是分组管理,使用方法如下: //作用:将连接ID加入某个组 //Context.ConnectionId 连接ID,每个页面 ...
- js获取url的各项参数
function getQueryStringArgs() { //取得查询字符串并去掉开头的问号 var qs = location.search.length > 0 ? location. ...
- js函数的各种写法与调用
以下是我见过的各种js函数的各种写法以及调用,虽然有些写法及其调用我不清楚其专业术语叫啥,但并不影响我写一个总结笔记. 我们刚开始接触js语音,经常看到的这种名叫“使用function关键字来定义函数 ...
- 菜鸟做HTML5小游戏 - 翻翻乐
记录下开放过程.做小游戏开发,又要跨平台,flash又不支持iPhone,html5是最好的选择. 先看看最后效果: 好了,开始demo. 1.准备工作: 图片素材(省略...最后代码一起打包) 了解 ...
- 关于t分布的证明
- Netbeans 注释模板配置
工具->模板->展开Java 选中Java类->在编辑器中打开 修改如下: <#if package?? && package != ""& ...
- PYTHON线程知识再研习E---条件变量同步Condition
Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的 acquire和release方法外,还提供了wait和notify ...
- CentOs6.5中安装和配置vsftp简明
这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下 一.vsftp安装篇 复制代码代码如下: # 安装vsftpdyum -y install vsftp ...
- JS监听组合按键
有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete ...
- 转:DesiredCapabilities内容详解--Appium服务关键字
## Appium 服务关键字 <expand_table> |关键字|描述|实例| |----|-----------|-------| |`automationName`|你想使用的自 ...