1

部門名と集計操作(平均、最大、最小)を受け取り、その操作を特定の部門で働く従業員の給与に適用して結果を返す機能があります。

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、departmentnameで働くemployeenameの最大給与であることをどのように示すことができますか

4

2 に答える 2

0

あなたがしているのは、すべての従業員の財務部門の最高給与を選択することだけです。おそらく従業員の部門を通過する必要がありますか?例えば、

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

これは、少なくとも、財務だけでなく、各従業員が所属する部門の最大給与を提供します。

于 2011-12-16T14:05:33.303 に答える
0
select salaryData('FINANCE','max') as max_sal from dual;

デュアルは、SQLで関数を1回実行できるようにするために存在します。

于 2011-12-18T07:49:11.053 に答える