oracle emp,dept表中查询部门人数大于所有部门平均人数的部门编号、部门名称、部门人数
发布网友
发布时间:2022-04-30 02:39
我来回答
共3个回答
懂视网
时间:2022-04-30 07:00
部门326为部门329的父部门,部门2与部门326是同级部门;
账户muyunfei,属于329部门
消息发送给部门2及部门326两个部门(326|2),发送的部门对象之间用“|”分割
查询:muyunfei账户是否属于该部门字符串(329|2)或者该部门字符串的子部门中
1、首先使用start with。。。。。connect by获得账户muyunfei的部门及父部门
2、遍历部门及父部门,在循环体重嵌套循环(该循环拆分以“|”为分隔符的部门号),在嵌套的循环体中判断,两结果是否相同,相同,即人属于当前部门或其子部门,返回1结束循环,否则继续循环
create or replace function check_User_in_dept(to_party_id varchar2, --部门id,多个用|分割
cur_user_id varchar2 --人员id
) return varchar2 as
/*
功能:判断当前人是是否属于当前部门中
* 1当前人属于该部门,0不属于
*/
party_str varchar2(200);
v_length NUMBER := LENGTH(to_party_id);
v_start NUMBER := 1;
v_index NUMBER;
cursor c_1 is
select *
from wx_party a
start with a.party_id = (select b.department
from wx_contacts b
where b.user_id = cur_user_id)
connect by a.party_id = prior a.parent_id;
begin
/*检索游标数据*/
for v_1 in c_1 loop
/**根据‘|’拆分字符串,并匹配数据,如果存在然后1,否则继续循环*/
WHILE (v_start <= v_length) LOOP
v_index := INSTR(to_party_id, '|', v_start);
-- DBMS_OUTPUT.PUT_LINE('v_index:' || v_index);
IF v_index = 0 THEN
party_str := SUBSTR(to_party_id, v_start);
v_start := v_length + 1;
ELSE
party_str := SUBSTR(to_party_id, v_start, v_index - v_start);
v_start := v_index + 1;
END IF;
--DBMS_OUTPUT.PUT_LINE('party_str:' || party_str);
--DBMS_OUTPUT.PUT_LINE('party_id:' || v_1.party_id);
IF party_str = v_1.party_id then
return '1';
end if;
END LOOP;
/*重置循环条件*/
v_length := LENGTH(to_party_id);
v_start := 1;
end loop;
return '0';
end;
版权声明:本文为博主原创文章,未经博主允许不得转载。
oracle查询某人所在的部门(326)是否属于部门字符串(329|2)或者该部门字符串的子部门中
标签:
热心网友
时间:2022-04-30 04:08
select s.deptno,s.dname,count(t.empno) from emp t,dept s where t.deptno=s.deptno group by s.deptno,s.dname having count(t.empno) > (select count(empno)/count(distinct deptno) from emp )
热心网友
时间:2022-04-30 05:26
一、数据库概念
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。
根据存储模型可将数据库划分为关系型数据库和非关系型数据库。
关系型数据库,是建立在关系模型基础上的数据库,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。
数据库设计的三范式:
第一范式是指数据库表的每一列都是不可分割的基本数据项。
第二范式就是非主属性非部分依赖于主键。
第三范式就是属性不依赖于其它非主属性。
二、select查询列
--查询
-- 员工表 部门表 薪资等级表 奖金表
--select *|字段名1,字段2,... from 表名;
--查询所有的员工信息
select * from emp;
--查询所有的员工姓名,员工编号,上级经理人编号,部门编号
--查询的数据: 员工姓名,员工编号,上级经理人编号,部门编号
--数据的来源: emp员工表
--条件:
select ename, empno, mgr, deptno from emp;
--去重 distinct
select distinct deptno from emp;
--去重的要求:查询出来的两条数据,要求每一个字段的值都相同,才能达到去重效果
select distinct deptno,ename from emp;
--取别名
--""原样输出 ,别名是小写的,有特殊符号存在,前后必须添加""
--给字段取别名 (as) 别名
select ename as "username", empno "员工 编号" from emp;
--给表取别名: 表名 别名,注意:表取别名不能出现as
select ename 员工名称 from emp e;
--伪列 :不存在的字段
--表达式
select distinct 123*456 乘积 from dept;
--字符串用单引号表示 ,原样输出用双引号
select empno,ename,123*345,'haha' 哈哈 from emp;
--虚表 没有数据,没有字段
select 123*456,'hehe' from al;
--字符串的拼接 ||
--查询员工姓名,结果前拼接SXT-
select 'SXT-'||ename "尚学堂员工姓名",comm from emp;
--null是空值,和数字运算,结果还是null
select ename ,comm "原奖金",comm+100 "新奖金" from emp;
--null 和 字符串拼接,结果是原串
select ename ,comm "原奖金",comm||'100' "新奖金" from emp;
--处理null值, nvl(值1,值2) 当值1为null,函数的结果为值2,当值1不为null,函数的结果为值1
例如:select nvl(null,0) from al;
三、查询行
--select 数据 from 表名 where 行过滤条件;
--执行流程: from where select
--查询20部门的所有员工的信息
--查询的数据: *
--来源: emp
--条件: deptno=20
select * from emp where deptno=20;
-- 比较条件:= != <> > < >= <=
-- 查询 SMITH 的信息
select * from emp where ename = 'SMITH';
-- 查询除了'SMITH'之外的所有人信息 != <>
select * from emp where ename != 'SMITH';
-- and | or
--区间范围的值: > < >= <= between and
-- 查询工资在1500~2500之间的员工工种和姓名和工资
...所有部门平均人数的部门编号、部门名称、部门人数
select s.deptno,s.dname,count(t.empno) from emp t,dept s where t.deptno=s.deptno group by s.deptno,s.dname having count(t.empno) > (select count(empno)/count(distinct deptno) from emp )
如何用oracle查询出部门名称,部门员工数,部门平均工资,部门最低工资...
这是oracle中默认用户scott下的表。本问题涉及到三张表,数据分别如下:emp表:dept表:salgrade表:按题目要求,sql语句如下:select b.dname 部门名称,b.counts 部门员工数,b.avgsal 部门平均工资,b.minsal 部门最低工资,a.ename 姓名,c.grade 工资等级 from emp a,(select b.deptno,b.dname,co...
第七章 高级查询
select deptno 部门编号,job 岗位,sum(sal)from empgroup by deptno,job;练习21.查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。select d.deptno,dname,COUNT(e.deptno) 部门人数,max(sal) 最高工资,min(sal) 最低工资,sum(sal) 工资总和,avg(sal) 平均工资FROM emp e,...
oracle中 emp表怎显示每部门每岗位的平均工资,每部门的平均工资,每岗位...
部门:select avg(salary),dept_id 部门 from emp group by dept_id 岗位:select avg(salary),gangwei 岗位 from emp group by gangwei
零基础学Oracle-使用HAVING子句限制分组结果
例如,要统计每个部门的平均工资且要求大于2000元,代码如下:SELECT deptno AS 部门编号, AVG(sal) AS 平均工资 FROM emp GROUP BY deptno HAVING AVG(sal) > 2000;这里,HAVING子句确保了只有平均工资大于2000的部门才会被包含在查询结果中。而如果直接用WHERE,由于不能使用聚合函数,就无法达到这个...
17/12/6 子查询
4.查询部门人数大于所有部门平均人数的部门编号,部门名称,部门人数。-子查询返回的条数,可以是一套或多条 -和多行子查询进行比较时,需要使用多行操作符.in:any: 表示和子查询的 任意 一行结果进行比较,有一个满足条件即可。< any: 表示小于子查询结果集中的任意一个,即小于最大值就可以。> ...
数据库性能优化有哪些措施?
例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行...