PL/SQL 函数查看最高工资

Posted

技术标签:

【中文标题】PL/SQL 函数查看最高工资【英文标题】:PL/SQL function to view maximum salary 【发布时间】:2011-12-16 12:07:23 【问题描述】:

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

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在departmentname工作的最高工资

【问题讨论】:

我们不清楚您到底在问什么。是否可以提供一些示例输入数据和您希望看到的输出? 您考虑过使用 group by 吗?比如 select ..., e.name into ... from ... where ... group by e.name; 是的,通过员工 ID 执行此操作,然后 a) 值与普通工资相同(因为我假设员工在员工 ID 上是唯一的)和 b) 你将不得不做再次与函数内部类似的查询。你也可以转储函数。 【参考方案1】:

您所做的只是为财务部门的每位员工选择最高薪水。您是否可能需要通过员工的部门?例如,

select e.employeeid, e.employeename, salaryData(d.deptname,'max') as max_sal from employee e join department d on e.deptno=d.deptno;

这至少会提供每个员工所属部门的最高薪水,而不仅仅是财务。

【讨论】:

【参考方案2】:
select salaryData('FINANCE','max') as max_sal from dual;

双重存在允许您在sql中运行一次函数。

【讨论】:

以上是关于PL/SQL 函数查看最高工资的主要内容,如果未能解决你的问题,请参考以下文章

如何在pl-sql中修复此功能

PL/SQL 上机练习

00984. 00000 - “此处不允许列”

PL/SQL 显示变化前后的工资

创建一个PL/SQL块,计算一年的补偿金额。

在 PL/SQL 中显示函数