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组函数 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),count(*) from emp;

分析:

--组函数自动滤空,组函数忽略空值

--修正函数的滤空

select count(nvl(comm,0)),count(*) fromemp;

3.分组数据

A  求各个部门的平均工资

思路:需要把各个部门的数据划分….10部门 20部门 30部门….分组……

select deptno,avg(sal)

from emp

group by deptno;

运行结果:

B  组函数设计的本意

(1)select检索的列 必须要位于group by后面的集合列中

(2)、组函数设计的本意:必须要在分组数据之上,进行结果集的检索….

注意:group by子句要求:所有在select中出现的列,都必须在出现group by分组子句中。

select a, b, c

from emp

group by a, b, c,d; 这种格式是对的,因为在select后的abc都在groub by后面。

 

select a, b, f

  from emp

  group by a, b, c,d;  这种格式是错的,因为在select后的f不在group

4 GROUP BY子句中包含多个列

--按部门  不同的职位 统计平均工资

--先按照部门分组,在按照job分组,如果deptnojob一样,就是同一组,然后求平均工资。

 

--求各个部门的,每一个工种的平均工资

select deptno,job,avg(sal),count(deptno)

from emp

group by deptno,job

order by 1;

截图:

5 分组过滤

--查询各个部门的平均工资

--进一步,查询平均工资大于2000的部门

select deptno,avg(sal)

from emp

group by deptno

having avg(sal) > 2000;

6 havingwhere子句区别

10号部门的平均工资

方法1:先分组,在过滤

select deptno,avg(sal)

from emp

group by deptno

having deptno=10;

方法2:先过滤再分组

select deptno,avg(sal)

from emp

where deptno = 10

group by deptno;

7 关于sql优化

select * from emp;

select deptno, ename, ...,  from emp 把要显示的所有的列都写出来,速度快,,不需要"翻译"

 

select *form emp

where (deptno = 10) and (deptno = 20) and (deptno=30)

 

<---------

oracle解析逻辑表达式 的方向....从右向左

 

目录
相关文章
|
17天前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
19天前
|
SQL 数据处理 数据库
|
19天前
|
SQL Oracle 关系型数据库
SQL 中的大小写处理函数详解
【8月更文挑战第31天】
35 0
|
19天前
|
SQL 数据库
|
19天前
|
SQL 数据采集 数据挖掘
为什么要使用 SQL 函数?详尽分析
【8月更文挑战第31天】
11 0
|
19天前
|
SQL 存储 关系型数据库
COALESCE 函数:SQL中的空值处理利器
【8月更文挑战第31天】
73 0
|
19天前
|
SQL 关系型数据库 数据处理
|
19天前
|
SQL 数据挖掘
|
19天前
|
SQL Oracle 关系型数据库
NVL() 函数:SQL中的空值处理利器
【8月更文挑战第31天】
118 0
|
20天前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
88 0