średnia harmoniczna pl/sql

0

Witam, chciałbym wypisać tych pracowników którzy zarabiają powyżej średniej harmonicznej wszystkich zarobków. Proszę o nakierowanie co robię źle. Oto mój kod:

 
declare

cursor c_emp is
select first_name, last_name, salary from employees;
imie employees.first_name%type;
nazwisko employees.last_name%type;
kwota employees.salary%type;
a number(5):=1;
b number;
sr_harm number;

begin


open c_emp;
LOOP
fetch c_emp into imie,nazwisko,kwota;
b:=c_emp%ROWCOUNT;
a:=a+1/kwota;
if c_emp%NOTFOUND THEN
sr_harm:=b/a;


if kwota > sr_harm THEN
dbms_output.put_line('Imie: ' ||imie||' Nazwisko: '||nazwisko);
END IF;
END IF;
EXIT WHEN c_emp%NOTFOUND;
END LOOP;
close c_emp;

end;
0

A po co PL/SQL do tego ?

 
SELECT first_name,
  last_name,
  salary
FROM
  (SELECT COUNT(0) over () / SUM(1/salary) over () harm,
    first_name,
    last_name,
    salary
  FROM employees
  )
WHERE salary>harm;
0

Na zajęciach z PL/SQL to miałem dlatego właśnie tego używam :P

0

Zauważ, że w jednym przebiegu pętli chcesz:
a) wyliczyć średnią harmoniczną
b) odfiltrować pracowników

W pętli filtrujesz po wartości, która nie jest wyliczona (jest wyliczana, gdy dostaniesz c_emp%NOTFOUND).

Potrzebujesz drugiej pętli / zapytania, która odfiltruje wg wyliczonej średniej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1