目录

一、分组函数

avg max min sum

count

二、创建聚组

group by

分组函数误用

1、select语句中有分组函数,相关的列却没有出现在group by中

2、group by误用别名

3、过滤组只能使用having,不能使用where

4、分组函数最多嵌套两层


一、分组函数

分组函数:

作用于一组数据,对一组数据返回一个值,常用的有

AVG:平均值

MAX:最大值

MIN:最小值

SUM:求和

COUNT:统计

avg max min sum

select sal from emp where deptno=10;SAL
----------245050001300select max(sal),min(sal),avg(sal),sum(sal) from emp where deptno=10;MAX(SAL)   MIN(SAL)  AVG(SAL)   SUM(SAL)
---------- ---------- ---------- ----------5000  1300 2916.66667       8750

count

  • count(*):返回表中行的总数,包括重复与数据列中为null的行,其他分组函数统计都不计算null的行。如comm非空行为4行,其球平均值时是comm之和除以4。
  • count(列名):统计非空的行
select avg(nvl(comm,0)) from emp;AVG(NVL(COMM,0))
----------------157.142857select avg(comm) from emp;AVG(COMM)
----------550
1、返回comm列中非空行数
select count(comm) from emp;COUNT(COMM)
-----------42、返回表emp总行数
select count(*) from emp;COUNT(*)
----------14

distinct

count(distinct)

select distinct deptno from emp;DEPTNO
----------301020select count(distinct deptno)  from emp;COUNT(DISTINCTDEPTNO)
---------------------3

二、创建聚组

group by

SELECT column, group_function(column) FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[ORDER BY column]

  • 使用group by子句将表中数据分成若干组
  • 不能使用列别名
select deptno,avg(sal),max(sal),min(sal) from emp group by deptno order by deptno;DEPTNO   AVG(SAL)  MAX(SAL)   MIN(SAL)
---------- ---------- ---------- ----------10   2916.66667      5000       130020    2175           3000       80030   1566.66667       2850       950
#根据多个列进行分组
select deptno,job,avg(sal) from emp group by deptno,job order by deptno;DEPTNO JOB         AVG(SAL)
---------- --------- ----------10 CLERK    130010 MANAGER      245010 PRESIDENT    500020 ANALYST      300020 CLERK     95020 MANAGER      297530 CLERK     95030 MANAGER      285030 SALESMAN     14009 rows selected.

分组函数误用

1、select语句中有分组函数,相关的列却没有出现在group by中

select deptno,max(sal) from emp;
select deptno,max(sal) from emp*
ERROR at line 1:
ORA-00937: not a single-group group function

2、group by误用别名

select deptno no ,max(sal) from emp group by no;
select deptno no ,max(sal) from emp group by no*
ERROR at line 1:
ORA-00904: "NO": invalid identifier

3、过滤组只能使用having,不能使用where

使用having时,having可以在group by前也可以在其后面

having是对分组后的结果进行过滤

select deptno,avg(sal) from emp where avg(sal) >2000 group by deptno;
select deptno,avg(sal) from emp where avg(sal) >2000 group by deptno*
ERROR at line 1:
ORA-00934: group function is not allowed hereselect deptno,avg(sal) from emp having avg(sal) >2000 group by deptno;DEPTNO   AVG(SAL)
---------- ----------10 2916.6666720     2175
select deptno,avg(sal) from emp group by deptno having avg(sal) >2000;DEPTNO   AVG(SAL)
---------- ----------10 2916.6666720     2175

4、分组函数最多嵌套两层

select max(avg(sal)) from emp group by deptno;MAX(AVG(SAL))
-------------2916.66667select count(max(avg(sal))) from emp group by deptno;
select count(max(avg(sal))) from emp group by deptno*
ERROR at line 1:
ORA-00935: group function is nested too deeply

ORACLE:分组函数相关推荐

  1. 【转】【CUBE】Oracle分组函数之CUBE魅力

    [转][CUBE]Oracle分组函数之CUBE魅力 http://blog.itpub.net/519536/viewspace-610997/ Oracle的CUBE与ROLLUP功能很相似,也是 ...

  2. oracle 高效函数,Oracle分组函数之高效的ROLLUP

    Oracle/" target=_blank>Oracle分组函数之高效的ROLLUP ㈠ 初始化实验坏境 www.2cto.com [sql] hr@ORCL> create ...

  3. oracle rollup 排序,Oracle分组函数之ROLLUP用法

    rollup函数 本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as s ...

  4. Oracle分组函数和筛选语句详析

    分组函数:分组函数作用于一组数据,并对一组数据返回一个值 并且当分组函数嵌套了两层时就必须使用Group by 来标注出分组函数分组依据 并且分组聚合函数只能嵌套一层组函数, \还有就是,分组函数不会 ...

  5. oracle分类函数总结,Oracle分组函数之ROLLUP的基本用法

    rollup函数 本博客简单介绍一下oracle分组函数之rollup的用法,rollup函数常用于分组统计,也是属于oracle分析函数的一种 环境准备 create table dept as s ...

  6. 【ROLLUP】Oracle分组函数之ROLLUP魅力

      本文通过演示给出Oracle ROLLUP分组函数的用法,体验一下Oracle在统计查询领域中的函数魅力.ROLLUP分组函数可以理解为Group By分组函数封装后的精简用法,这里同时给出ROL ...

  7. oracle打散分组函数,oracle分组函数

    分组函数 一 介绍 1.分组函数作用于一组数据,并对一组数据返回一个值 2.组函数类型: avg 平均值 count max min stddev sum 二 代码 1.工资最高的:SQL> s ...

  8. Oracle分组函数

    SQL> --avg,count,max,min,sum举例 SQL> --统计员工个数 SQL> select count(*) from emp; COUNT(*)        ...

  9. Oracle→分组函数、GROUP BY、HAVING、多表查询、连接、外连接、自连接、子查询单行多行、ROWNUM、ANY、ALL、NOT IN(...IS NOT NULL)、条件求和、DUAL

    分组函数 GROUP BY HAVING GROUP BY ROLLUP() 多表查询 等值连接 不等值连接 外连接 自连接 层次查询 子查询 子查询伪劣ROWNUM ROWID NOT IN(-IS ...

  10. oracle model 分组,【已解决】关于Oracle分组函数高级用法(按照N条分组并生成唯一号)...

    prompt PL/SQL Developer import file prompt Created on 2018年3月30日 by set feedback off set define off ...

最新文章

  1. 带限制条件的最大子矩阵 - 牛客
  2. 毕业设计第四次任务书
  3. git reset --hard、git reset --sort及git revert区别
  4. 向ASP.NET Core迁移
  5. Python编辑统一缩进(Pycharm)
  6. [转载]压岁钱年年涨的行情不要太纠结
  7. table内容超出宽度时隐藏并显示省略标记
  8. 拓端tecdat|R语言stan进行基于贝叶斯推断的回归模型
  9. PHP PDO(mysql) 封装类
  10. ARM9 S3C2440 定时器中断
  11. pdf2swf font2swf avi2swf
  12. 【java】爬虫之零基础利用postman分析并实现12306余票查询功能
  13. 成为java架构师需要几年,详细说明
  14. 联想昭阳E42-80笔记本电脑重装系统记录
  15. win10升级工具_win10升级安装工具
  16. 基于四叉树的图像压缩问题
  17. IDEA中的TODO使用和Debug史诗级详细使用说明
  18. 使用Zend Expressive快速进行企业应用开发
  19. 海外服务器租用主要要看三个方面
  20. AR Engine光照估计能力,让虚拟物体在现实世界更具真实感

热门文章

  1. 元宇宙爆火!新风口下程序员有哪些机会?
  2. 民非企业盈利怎么处理_​民办非企业利息收入如何处理
  3. Eclipse 字体不一致问题
  4. Substance Painter 服饰材质制作 衣服 腰带
  5. 中职生计算机基础知识总结,浅谈中职学生的计算机基础教育
  6. call()、apply()、bind()的区别
  7. Eyenuk宣布FDA核准EyeArt自主AI系统用于糖尿病视网膜病变筛查
  8. C/C++ 位域定义
  9. 在matlab中使用spm8,[转载]在matlab中同时使用spm2,spm5,spm8
  10. JDK中的Hprof命令