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 ...
随机推荐
- JAVA中,JSON MAP LIST的相互转换
1 JSON包含对象和数组,对应于JAVA中的JSONObject,JSONArray 2 String 转JSON对象 JSONObject.fromObject("String" ...
- 武汉科技大学ACM :1002: 零起点学算法28——判断是否闰年
Problem Description 输入年份,判断是否闰年 Input 输入一个整数n(多组数据) Output 如果是闰年,输出yes,否则输出no(每组数据一行) Sample Input 2 ...
- 利用try-catch判断变量是已声明未赋值还是未声明
目的是如果一个变量是已声明未赋值,就可以直接赋值,并且不能改变变量的作用域: 如果未声明的话,就重新声明, 在网上搜了下,常见的方法是if(typeof(a)=='undefined'){var a= ...
- 网站UV,与IP、PV
什么是网站UV,与IP.PV在概念上的区别? UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客.00:00-24:00内相同的客户端只被计算一次. PV(访问量) ...
- LinkButton中添加删除确认框
LinkButton1.Attributes.Add("onclick", "javascript:return confirml('确认删除?');");
- .net core3
- Java如何从HttpServletRequest中读取HTTP请求的body
首先贴出原文地址,尊重原作者 http://blog.csdn.net/zxygww/article/details/47045055 注意:下面方法已验证通过. HTTP请求中的是字符串数据: // ...
- 程序被送入后台后,向 iOS 借时间,完成长期任务-备
12.2.2. 方案 使用UIApplication的beginBackgroundTaskWithExpirationHandler: 实例方法.在你完成任务后,调用UIApplication的en ...
- 剑指offer中二进制中1的个数
容易想到的是将n一位一位的和1进行比较,产生如下代码 但是这样的话会出下面的问题 那么就是原数据不动,将1依次移动进行比较有如下的代码 一种更简单的方法是: 这样做的思路是 总而言之
- Spinner 实现key value 效果
在使用Spinner进行下拉列表时,我们一般都会使用字符串数组的方式加ArrayAdapter,取到的列表值就是我们所看到的Text.如果我们想实现网页中select <option value ...