Professional Documents
Culture Documents
------------
select * from employees where salary in (select salary from employees where
last_name='Cambrault');
------
select * from employees where (salary, department_id) in (
select min(salary), department_id from employees group by department_id
);
---
select department_id, avg(salary) from employees
group by department_id
having avg(salary) >= (select avg(salary) from employees where
department_id=30);
select * from employees e where exists (select 1 from employees ang where
ang.manager_id = e.employee_id);
---ang.care cistiga cel mai mare sal pentru fievare tip de functie
select * from employees
where salary in (select max(salary) from employees group by job_id);
--ang care cistiga mai mult decit media dep. din care fac parte
select * from employees e where salary > (select avg(salary) from employees e2 where
e.department_id = e2.department_id group by department_id);
select * from employees e where not exists (select employee_id from job_history jh
where jh.employee_id = e.employee_id);
--sa afisam detlii despre job-uri pentru pers. care anteriro au fost angajate pe
poztie de IT_PROG
select * from jobs where job_id in (
select job_id from employees where employee_id in (
select employee_id from job_history where job_id='IT_PROG'
)
);
--toate inf.depsre angajatii care cistiga intre cel mai mic salariu din depart.lor
si 3000
select * from employees e where salary > (
select min(salary) from employees e2 where e.department_id = e2.department_id group
by department_id
) and salary < 3000;
--pers.al caror salariu este mai mic decit ale oricaror pers.cu job_id=FI_MGR
select * from employees e
where salary < (select salary from employees where job_id='FI_MGR');
--pt fiecare angajar o comparatie cu sal.mediu din depart lui si sal.mediu din org,
inclusiv diferentele si starea (mai mare/mai mic, egal)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
);
with x as (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from x;
------------
select * from employees where salary in (select salary from employees where
last_name='Cambrault');
------
select * from employees where (salary, department_id) in (
select min(salary), department_id from employees group by department_id
);
---
select department_id, avg(salary) from employees
group by department_id
having avg(salary) >= (select avg(salary) from employees where
department_id=30);
select * from employees e where exists (select 1 from employees ang where
ang.manager_id = e.employee_id);
---ang.care cistiga cel mai mare sal pentru fievare tip de functie
select * from employees
where salary in (select max(salary) from employees group by job_id);
--ang care cistiga mai mult decit media dep. din care fac parte
select * from employees e where salary > (select avg(salary) from employees e2 where
e.department_id = e2.department_id group by department_id);
select * from employees e where not exists (select employee_id from job_history jh
where jh.employee_id = e.employee_id);
--sa afisam detlii despre job-uri pentru pers. care anteriro au fost angajate pe
poztie de IT_PROG
select * from jobs where job_id in (
select job_id from employees where employee_id in (
select employee_id from job_history where job_id='IT_PROG'
)
);
--toate inf.depsre angajatii care cistiga intre cel mai mic salariu din depart.lor
si 3000
select * from employees e where salary > (
select min(salary) from employees e2 where e.department_id = e2.department_id group
by department_id
) and salary < 3000;
--pers.al caror salariu este mai mic decit ale oricaror pers.cu job_id=FI_MGR
select * from employees e
where salary < (select salary from employees where job_id='FI_MGR');
--pt fiecare angajar o comparatie cu sal.mediu din depart lui si sal.mediu din org,
inclusiv diferentele si starea (mai mare/mai mic, egal)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
);
with x as (
select employee_id, salary,
(select round(avg(salary)) from employees) sal_med_org,
(select round(avg(salary)) from employees e2 where e2.department_id =
e.department_id) sal_med_depart
from employees e
)
select employee_id, salary, salary-sal_med_org, salary-sal_med_depart, sal_med_org,
sal_med_depart
,case when salary > sal_med_org then '+ med.sal.org' else '- med.sal.org' end as
Stare_med_sal_org
,case when salary > sal_med_depart then '+ med.sal.depart' else '- decit
med.sal.depart' end as Stare_med_sal_depart
from x;
--numele si data angajarii pentru pers. care au fost angajate dupa persoana cu id-ul
101
select first_name, last_name, hire_date from employees
where hire_date > (select hire_date from employees where employee_id = 101)
order by hire_date;
--depart. pentru care costul total mediu al salariului este mai mare decit costul
mediu pe organizatie
select AVG(salary) as salariu_total_mediu, department_id
from employees
group by department_id
having avg(salary) > ( select AVG(salary) from employees );
--cu CTE
with
nr_pe_depart as (
select department_id, count(*) nr_ang, sum(salary) sum_sal
from employees
group by department_id
),
nr_total as (
select count(*) totalAng, sum(salary) totalSal from employees
)
select nr_pe_depart.department_id, round(nr_pe_depart.nr_ang / nr_total.totalang *
100, 2), round(nr_pe_depart.sum_sal / nr_total.totalsal * 100, 2)
from nr_pe_depart, nr_total;
--
select nr_pe_depart.department_id, (select department_name from departments where
nr_pe_depart.department_id=department_id) as nume_departament,
round(nr_pe_depart.nr_ang / nr_total.totalang * 100, 2),
round(nr_pe_depart.sum_sal / nr_total.totalsal * 100, 2)
from
(select department_id, count(*) nr_ang, sum(salary) sum_sal from employees group
by department_id) nr_pe_depart
,
(select count(*) totalAng, sum(salary) totalSal from employees) nr_total;