Plsql 用于查看最高工资的PL/SQL函数

Plsql 用于查看最高工资的PL/SQL函数,plsql,aggregate-functions,stored-functions,Plsql,Aggregate Functions,Stored Functions,我有一个函数,它接收部门名称和聚合操作(平均值、最大值、最小值),并将该操作应用于在给定部门工作的员工的工资,并返回结果 create or replace function salaryData (p_depname varchar2, p_aggr_op varchar2) return number is v_aggrr_op varchar2(20); v_sal_max number; v_sal_min number; v_sal_avg number; begin

我有一个函数,它接收部门名称和聚合操作(平均值、最大值、最小值),并将该操作应用于在给定部门工作的员工的工资,并返回结果

create or replace
function salaryData (p_depname varchar2, p_aggr_op varchar2)
return number
is
  v_aggrr_op varchar2(20);
  v_sal_max number;
  v_sal_min number;
  v_sal_avg number;
begin
  select max(e.salary), min(e.salary), avg(e.salary)
  into v_sal_max, v_sal_min, v_sal_avg
  from employee e join department d
  on e.deptno=d.deptno
  where d.deptname=p_depname;
  if p_aggr_op in ('max','MAX') then
    return v_sal_max;
  end if;

  if p_aggr_op in ('min','MIN') then
    return v_sal_min;
  end if;

  if p_aggr_op in ('avg','AVG') then
    return v_sal_avg;
  end if;
end salaryData;
/ 
当我使用函数调用时

select salaryData('FINANCE','max') as max_sal from employee;
我得到的结果是:

max_sal|
-------|
20000  |
20000  |
20000  |
20000  |
20000  |
-------

我如何显示这是employeeid的最高工资,employeename在部门工作名称

您所做的只是为每个员工选择财务部门的最高工资。你可能需要通过员工部门吗?例如:

select e.employeeid, e.employeename, salaryData(d.deptname,'max') as max_sal from employee e join department d on e.deptno=d.deptno;
这将至少提供每个员工所属部门的最高工资,而不仅仅是财务

select salaryData('FINANCE','max') as max_sal from dual;

Dual允许您在sql中只运行一次函数。

我们不清楚您到底在问什么。是否可以提供一些示例输入数据和预期输出?是否考虑使用组?如选择…,e.name进入。。。从…起哪里按e.name分组;是的,要按员工id执行此操作,那么a)值与普通工资相同(因为我假设员工id上的员工是唯一的),并且b)您必须再次执行与函数中类似的查询。您不妨转储该函数。