Функция PL / SQL для просмотра максимальной зарплаты - PullRequest
1 голос
/ 16 декабря 2011

У меня есть функция, которая получает название отдела и операцию агрегирования (среднее, максимальное, минимальное) и применяет операцию к зарплате сотрудников, работающих в данном отделе, и возвращает результат

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, employeeename, работающего на имя отдела

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011
select salaryData('FINANCE','max') as max_sal from dual;

Dual существует, чтобы позволить вам запускать функции один раз в sql.

0 голосов
/ 16 декабря 2011

Все, что вы делаете, это выбираете максимальную зарплату для финансового отдела для каждого сотрудника. Возможно, вам нужно сдать отдел сотрудника? Например.,

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

Что, по крайней мере, обеспечило бы максимальную зарплату департамента, к которому принадлежит каждый сотрудник, а не только финансы.

...