oracle 组函数 max min等

一、组函数嵌套

ORACLE中规定,组函数嵌套只能嵌两层。其实多层嵌套并没有实际的用途,因此ORACLE没有提供组函数的多层嵌套。但是,单行函数是可以多层嵌套的。

二、

1、Oracle包含以下组函数  -AVG([DISTINCT|ALL]n) 返回平均值,忽略空值  -COUNT({*|[DISTINCT|ALL]}expr) 返回记录的数量,用*包含空值,否则不包含空值  -MAX([DISTINCT|ALL]expr)  返回最大值,忽略空值  -MIN([DISTINCT|ALL]expr) 返回最小值,忽略空值  -SUM([DISTINCT|ALL]n)  返回总值,忽略空值  -STDDEV([DISTINCT|ALL]x)  返回标准差,忽略空值  -VARIANCE([DISTINCT|ALL]x)  返回统计方差,忽略空值

2、AVG和SUM的用法  -可以对数值型数据使用AVG和SUM    例:     SELECT AVG(sal),SUM(sal)     FROM   EMP     WHERE  job LIKE ‘SALES%‘;

3、MIN和MAX的用法  -MIN和MAX可以用于任何数据类型  例:     SELECT MIN(hiredate),MAX(hiredate)     FROM   emp;  结果:       MIN(HIREDATE)   MAX(HIREDATE)          17-12月-80      23-5月 -87

4、

COUNT的用法1)COUNT(*)返回表中行的总数  例:     SELECT  COUNT(*)     FROM    emp     WHERE   deptno=30;  结果:         COUNT(*)                6  2)COUNT(expr)返回非空行的数量  例:     SELECT  COUNT(comm)     FROM    emp     WHERE   deptno=30;  结果:       COUNT(*)                4

5.组函数和空值1)组函数会忽略列中的空值  例:     SELECT  AVG(comm)     FROM    emp;  结果:       AVG(COMM)             5502)NVL函数可以使组函数强制包含含有空值的记录  例:     SELECT AVG(NVL(comm,0))     FROM   emp;  结果:       AVG(NVL(COMM,0))               157.142857

6、创建数据组  SELECT     column,group_function(column)  FROM       table  [WHERE     condition]  [GROUP BY  group_by_expression]  [OEDER BY  column];    -通过GROUP BY子句将表中的记录划分成若干个小组  -GROUP BY子句中必须包含指定的列  -GROUP BY子句中不能使用列的别名  -当使用GROUP BY子句时Orale服务器会自动对结果集合默认按GROUP BY子句所指定的列升序排列  -在SELECT列表中除了组函数外,所有列都必须包含在GROUP BY子句中  例:     SELECT   deptno,AVG(sal)     FROM     emp     GROUP BY deptno;  结果:        DEPTNO     AVG(SAL)            10       2916.66667            20       2175            30       1566.66667   -GROUP BY所指定的列并不是必须出现在SELECT列表中   例:      SELECT   AVG(sal)      FROM     emp      GROUP BY deptno;   结果:             AVG(SAL)             2916.66667                   2175             1566.66667

7.按多个列分组  例:     SELECT   deptno,job,sum(sal)     FROM     emp     GROUP BY deptno,job;  结果:        DEPTNO     JOB       SUM(SAL)              10     CLERK         1300              10     MANAGER       2450              10     PRESIDENT     5000              20     CLERK         1900              20     ANALYST       6000              20     MANAGER       2975              30     CLERK          950              30     MANAGER       2850              30     SALESMAN      5600

8.使用组函数的非法查询  例:     SELECT dept,COUNT(ename)     FROM   emp;  结果:        ERROR 位于第 1 行:         ORA-00937: 非单组分组函数   纠正:       SELECT   dept,COUNT(ename)       FROM     emp       GROUP BY deptno;  结果:        DEPTNO    COUNT(ENAME)              10               3              20               5              30               6

9.限制组结果  使用HAVING子句限制组  -对记录分组  -在分组的基础上应用组函数  -与HAVING子句匹配的结果才输出

SELECT    column,group_function  FROM      table  [WHERE    condition]  [GROUP BY group_by_expression]  [HAVING   group_condition]  [ORDER BY column];    例1:     SELECT   deptno,max(sal)     FROM     emp     WHERE    max(sal)>2900     GROUP BY deptno;  结果:        ERROR 位于第 3 行:         ORA-00934: 此处不允许使用分组函数   纠正:        SELECT   deptno,max(sal)        FROM     emp        GROUP BY deptno        HAVING   max(sal)>2900;  结果:        DEPTNO     MAX(SAL)              10         5000              20         3000  例2:        SELECT   job,SUM(sal) PAYROLL        FROM     emp        WHERE    job NOT LIKE ‘SALES%‘        GROUP BY job        HAVING   SUM(sal)>5000        ORDER BY SUM(sal);  结果:        JOB           PAYROLL          ANALYST          6000          MANAGER          8275

10.组函数嵌套    -与单行函数不同,组函数只能嵌套两层   例:显示平均薪水的最大值       SELECT   max(avg(sal))       FROM     emp       GROUP BY deptno;   结果:         MAX(AVG(SAL))              2916.66667

练习1.使用emp表显示所有雇员的最多、最少、总和、平均薪水      SELECT ename,MAX(sal),MIN(sal),SUM(sal),AVG(sal)   FROM   emp;  2.显示emp表中不同部门编号的数量     SELECT COUNT(DISTINCT deptno)   FROM   emp;

3.在emp表中根据job列分组显示雇员的最多、最少、总和、平均薪水      SELECT   job,MAX(sal),MIN(sal),SUM(sal),AVG(sal)   FROM     emp    GROUP BY job;

4.使用emp表显示job名、每组最多、最少、总和、平均薪水  要求:按job列分组,ename列的名字不是以A开头,且任何组的最少薪水大于1600

SELECT   job,MAX(sal),MIN(sal),SUM(sal),AVG(sal)   FROM     emp   WHERE    ename NOT LIKE ‘A%‘   GROUP BY job   HAVING   MIN(sal)>1600

5.显示部门名和每个部门的累计薪水,要求每个部门的累计薪水大于3000

SELECT   dname,SUM(sal)   FROM     emp e,dept d   WHERE    e.deptno=d.deptno   GROUP BY dname   HAVING   SUM(sal)>3000;

6.显示每个部门、每个岗位的最高及最低薪水

SELECT   deptno,job,MAX(sal),MIN(sal)   FROM     emp   GROUP BY deptno,job;

三、sql聚合函数嵌套问题

参见http://bbs.csdn.net/topics/390462360

1、问题:我现在要查的是top client(买东西总和加起来最多的)所以我输了 SELECT C.CLIENTNO, C.CNAME, MAX(SUM(P.AMOUNT))           FROM CLIENT C,PURCHASE P           WHERE C.CLIENTNO=P.CLIENTNO           GROUP BY C.CLIENTNO,C.CNAME;提示说不是单组分组函数,所以 问题应该是出在 max(sum(p.amount))上吧,应该如何分开来写啊

解答:

with t as

(SELECT job, deptno, sum(sal) sal FROM emp group by job, deptno)

select * from t where sal = (select max(sal) from t)

2、要求显示:合计部门工资(sal)最高的部门号码(deptno)及确切的合计工资数。

如果我用select deptno, max(sum(sal))from emp group by deptno; 就会提示我嵌套太深,无法查询,或者是单一组无法group by 我的意思是 可能有10个或n个部门 每个部门都有一个合计工资 然后要找出合计工资最高的那个部门解答: select * from ( select deptno, sum(sal) sumsal from emp group by deptno order by sumsal desc ) where rownum <2 LZ请确定如果结果可能出现并列第一的现象,请使用: select a.deptno, a.sumsalfrom (select deptno, sum(sal) sumsal, rank() over(order by sum(sal) desc) rk from emp group by deptno ) a where rk < 2

原文地址:https://www.cnblogs.com/cathy-blog/p/9988139.html

时间: 2024-10-10 17:24:33

oracle 组函数 max min等的相关文章

Oracle组函数、多表查询、集合运算、数据库对象(序列、视图、约束、索引、同义词)等

count组函数:(过滤掉空的字段) select count(address),count(*) from b_user max() avg() min(),sum() select sum(age),max(age),min(age),avg(nvl(age,0)) from b_user 1       260     70      10      37.1428571428571 group by:如果前面定义了该字段名  则groupby必须也写上该字段 select name,pw

内置函数(max,min,zip)及文件处理

几个有意思的内置函数 max , min最基本用法 l=[1,3,100,-1,2] print(max(l)) print(min(l)) zip 1 print(list(zip(('a','n','c'),(1,2,3)))) 2 print(list(zip(('a','n','c'),(1,2,3,4)))) 3 print(list(zip(('a','n','c','d'),(1,2,3)))) 4 5 p={'name':'alex','age':18,'gender':'non

oracle 组函数

group by的增强 SQL> select deptno,job,sum(sal) from emp group by deptno,job SQL> + SQL> select deptno,sum(sal) from emp group by deptno SQL> + SQL> select sum(sal) from emp SQL> SQL> === SQL> SQL> select deptno,job,sum(sal) from em

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) ---------- ---------- -

oracle常用函数汇总

一.运算符算术运算符:+ - * / 可以在select 语句中使用连接运算符:|| select deptno|| dname from dept; 比较运算符:> >= = != < <= like between is null in逻辑运算符:not and or 集合运算符: intersect ,union, union all, minus 要求:对应集合的列数和数据类型相同 查询中不能包含long 列 列的标签是第一个集合的标签 使用order by时,必须使用位置

[Oracle系列整理03] oracle常用函数

一)日期函数[重点掌握前四个日期函数]1.add_months[返回日期加(减)指定月份后(前)的日期] add_months(d1,n1)[功能]:返回在日期d1基础上再加n1个月后新的日期.[参数]:d1,日期型,n1数字型[返回]:日期select sysdate,add_months(sysdate,3)  from dual;返回:2015/3/2 22:22:50,2015/6/2 22:22:50 2.last_day [返回该月最后一天的日期] last_day(d1)[功能]:

6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化

 1组函数 avg(),sum(),max(),min(),count()案例: selectavg(sal),sum(sal),max(sal),min(sal),count(sal) from emp / 截图: 2 组函数和null在一起 案例:求员工的平均奖金 错误sql: select avg(comm) 方式1,sum(comm)/count(comm)方式2,sum(comm)/count(*) 方式3 from emp; 截图: 错误原因: select count(comm

oracle max()函数和min()函数

当需要了解一列中的最大值时,可以使用MAX()函数:同样,当需要了解一列中的最小值时,可以使用MIN()函数.语法如下. SELECT          MAX (column_name) / MIN (column_name) FROM            table_name 说明:列column_name中的数据可以是数值.字符串或是日期时间数据类型.MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值. 实例7 MAX()函数的使用 查询TEACHER表中教师的最大年龄.实

Oracle学习(四):组函数

1.知识点:可以对照下面的录屏进行阅读 SQL> --组函数类型:avg,count,max,min,sum SQL> --工资总额 SQL> select sum(sal) from emp; SQL> --员工人数 SQL> select count(*) from emp; SQL> --平均工资 SQL> select sum(sal)/count(*) 一, avg(sal) 二 from emp; SQL> --平均奖金的三种方式:二三方法一样,