Lab 4
Lab 4
--------------------------
2. Sa se afiseze cel mai mare salariu, cel mai mic salariu, suma si media
salariilor
tuturor angajatilor. Etichetati coloanele Maxim, Minim, Suma, respectiv Media. Sa
se
rotunjeasca rezultatele.
SELECT COUNT(employee_id),job_id
FROM employees
GROUP BY job_id;
--------------------------
5. Sa se determine numarul de angajati care sunt sefi. Etichetati coloana �Nr.
manageri�.
SELECT MAX(salary)-MIN(salary)
FROM employees;
--------------------------
7. Scrieti o cerere pentru a se afisa numele departamentului, locatia, numarul de
angajati si salariul mediu pentru angajatii din acel departament. Coloanele vor fi
etichetate corespunzator.
SELECT min(avg(salary))
FROM employees
GROUP BY job_id;
-------------------------
12. Sa se afiseze codul, numele departamentului si suma salariilor pe departamente.
SELECT max(avg(salary))
FROM employees
GROUP BY department_id;
-------------------------
14. Sa se obtina codul, titlul si salariul mediu al job-ului pentru care salariul
mediu este
minim.
SELECT AVG(salary)
FROM employees
HAVING avg(salary)>2500;
-------------------------
16. Sa se afiseze suma salariilor pe departamente si, �n cadrul acestora, pe job-
uri.
a)
SELECT department_id, department_name,count(employee_id)
FROM employees RIGHT JOIN departments USING (department_id)
GROUP BY department_id, department_name
HAVING count(employee_id)<4;
b)
SELECT department_id, department_name,count(employee_id)
FROM employees RIGHT JOIN departments USING (department_id)
GROUP BY department_id, department_name
HAVING count(employee_id)>=(SELECT max(count(employee_id))
FROM employees
GROUP BY department_id);
-------------------------
AICI AM RAMAS: 19. Sa se afiseze salariatii care au fost angajati �n aceeasi zi a
lunii �n care cei mai multi
dintre salariati au fost angajati.
SELECT *
FROM employees
WHERE TO_CHAR(hire_date,'dd')IN (SELECT to_char(hire_date,'dd')
FROM employees
GROUP BY to_char(hire_date,'dd')
HAVING count(employee_id) IN (SELECT
max(count(employee_id))
FROM employees
GROUP BY
to_char(hire_date,'dd')));
-------------------------
20. Sa se obtina numarul departamentelor care au cel putin 15 angajati.
SELECT count(*)
FROM (SELECT department_id, count(employee_id)
FROM employees
GROUP BY department_id
HAVING count(employee_id)>=15);
-------------------------
21. Sa se obtina codul departamentelor si suma salariilor angajatilor care lucreaza
�n
acestea, �n ordine crescatoare. Se considera departamentele care au mai mult de 10
angajati si al caror cod este diferit de 30.
SELECT department_id,department_name,city,job_id,sum(salary)
FROM employees JOIN departments USING (department_id)
JOIN locations USING (location_id)
--WHERE department_id>80
GROUP BY department_id,department_name, job_id,city
HAVING department_id>80;
------------------------
24. Care sunt angajatii care au mai avut cel putin doua joburi?
SELECT employee_id
FROM job_history
GROUP BY employee_id
HAVING count(job_id)>=2;
------------------------
25. Sa se calculeze comisionul mediu din firma, lu�nd �n considerare toate liniile
din
tabel.
SELECT avg(commission_pct), count(commission_pct)
FROM employees;
????Asta?????
------------------------
26. Analizati cele 2 exemple prezentate mai sus (III � IV), referitor la operatorii
ROLLUP
si CUBE.
------------------------
27. Scrieti o cerere pentru a afisa job-ul, salariul total pentru job-ul respectiv
pe departamente
si salariul total pentru job-ul respectiv pe departamentele 30, 50, 80.
Se vor eticheta coloanele corespunzator. Rezultatul va aparea sub forma de mai
jos:
Job Dep30 Dep50 Dep80 Total
------------------------------------------------------------------------------
����.
------------------------
28. Sa se creeze o cerere prin care sa se afiseze numarul total de angajati si, din
acest total,
numarul celor care au fost angajati �n 1997, 1998, 1999 si 2000. Denumiti capetele
de
tabel in mod corespunzator.
SELECT last_name,salary,e.department_id,
(SELECT avg(salary)
FROM employees
WHERE department_id=d.department_id) medie
FROM employees e join departments d
ON e.department_id=d.department_id;
------------------------
32. Modificati cererea anterioara, pentru a determina si listarea numarului de
angajati din
departamente.
SELECT last_name,salary,e.department_id,
(SELECT avg(salary)
FROM employees
WHERE department_id=d.department_id) medie,
(SELECT count(employee_id)
FROM employees
WHERE department_id=d.department_id) nr
FROM employees e join departments d
ON e.department_id=d.department_id;
------------------------
33. Pentru fiecare departament, sa se afiseze numele acestuia, numele si salariul
celor mai
prost platiti angajati din cadrul sau.