07 - Ushtrime

Funksionet e Grupit

Ushtrim 1

Duke u bazuar ne historikun e punesimit

Afishoni kodin e punonjesve dhe daten kur kane filluar pune per here te pare ne kompani

Zgjidhje

select employee_id,min(start_date)

from job_history group by employee_id

order by employee_id;

Ushtrim 2

Afishoni kodin e cdo departamenti dhe numrin e punonjesve qe ka ai departament.

Zgjidhje

select department_id,count(*) as punonjes

from employees group by department_id;

Ushtrim 3

Afishoni kodin e cdo pozicioni pune dhe numrin e punonjesve qe kane aktualisht ate pozicion pune.

Zgjidhje

select job_id,count(*) as punonjes

from employees group by job_id ;

Ushtrim 4

Afishoni emrin e qytetit dhe numrin e zyrave qe ndodhen ne ate qytet

zgjidhje

select city,count(*) as zyra

from locations group by city;

Ushtrim 5

Afishoni kodin e shtetit, emrin e qytetit dhe numrin e zyrave qe ndodhen ne ate qytet te atij shteti.

zgjidhje

select country_id,city,count(*) as zyra

from locations group by country_id, city;

JOIN

Ushtrim

Afishoni punonjesit qe kane te njejten vjetersi pune ne vite perbri njeri tjetrit si me poshte:

Punonjesi nuk duhet te asociohet me vetveten

zgjidhje

select

e1.employee_id,e1.first_name,e1.last_name,

trunc(months_between(sysdate,e1.hire_date)/12) as V1,

e2.employee_id,e2.first_name,e2.last_name,

trunc(months_between(sysdate,e2.hire_date)/12) as V2

from employees e1 join employees e2

on trunc(months_between(sysdate,e1.hire_date)/12)=trunc(months_between(sysdate,e2.hire_date)/12)

where e1.employee_id<>e2.employee_id;

Ushtrim 2

Per te gjithe punonjesit afishoni:

  1. kodin e tij,

  2. kodin e pozicionit te punes qe ka aktualisht dhe

  3. kodin e pozicionit te punes qe ka patur me pare

Kodi

Pozicioni aktual (kodi)

Pozicioni meparshem

(kodi)

zgjidhje

select e.employee_id,e.hire_date,e.job_id,

jh.start_date,jh.job_id

from employees e join job_history jh

on e.employee_id=jh.employee_id;

Te afishohen te gjithe punonjesit.

select e.employee_id,e.hire_date,e.job_id,

jh.start_date,jh.job_id

from employees e left outer join job_history jh

on e.employee_id=jh.employee_id;

Funksionet e grupit dhe JOIN

Ushtrim 1

a)

Afishoni emrin e cdo departamenti dhe numrin e punonjesve qe ka ai departament

Zgjidhje

select d.department_id,d.department_name,

count(*) as punonjes

from

employees e

join

departments d

on (e.department_id=d.department_id)

group by d.department_id, d.department_name

order by d.department_name;

b)

Afishoni vetem ato departamente te cilet kane me shume se sa 4 punonjes

Zgjidhje

select d.department_id,d.department_name,

count(*) as punonjes

from

employees e

join

departments d

on (e.department_id=d.department_id)

group by d.department_id, d.department_name

having count(*)>4

order by d.department_name;

c)

Afishoni vetem ato departamente te cilet ndodhen ne USA (ku USA ti jepet si argument ne momentin e ekzekutimit te komandes )

Zgjidhje

select d.department_id,d.department_name,

count(*) as punonjes

from

employees e

join

departments d

on (e.department_id=d.department_id)

join locations loc

on (d.location_id=loc.location_id)

where loc.country_id='&kodi_shtetit'

group by d.department_id, d.department_name

having count(*)>4

order by d.department_name;

d)

Afishoni gjithashtu edhe emrin e shtetit ne te cilin ndodhet ky departament

zgjidhje

select d.department_id,d.department_name,ct.country_name,

count(*) as punonjes

from

employees e

join

departments d

on (e.department_id=d.department_id)

join locations loc

on (d.location_id=loc.location_id)

join countries ct

on (ct.country_id=loc.country_id)

where loc.country_id='&kodi_shtetit'

group by d.department_id, d.department_name, ct.country_name

having count(*)>4

order by d.department_name;

Ushtrim 2

Afishoni emrin e cdo pozicioni pune dhe numrin e punonjesve qe kane ate pozicion pune

zgjidhje

Ushtrim 3

Ndertoni nje komande qe afishon sa punonjes ka ne sejcilin departament sipas pozicioneve te punes qe ata kane si me poshte:

Te afishohen vetem ato rreshta ku numri i punonjesve eshte me i madh se 4.

Zgjidhje

select

Department_name,job_title,count(*) as Nr

from employees inner join departments

on employees.department_id=departments.department_id

inner join jobs on employees.job_id=jobs.job_id

group by Department_name, job_title

having count(*)>4;

Ushtrim 4

Afishoni per cdo shtet dhe qytet numrin e departamenteve te ndodhen ne to:

Zgjidhje

select country_name,city,Count(*) as offices

from departments inner join locations on departments.location_id=locations.location_id

inner join countries on locations.country_id=countries.country_id

group by country_name, city;

Ushtrim ***

Afishoni per cdo shtet numrin e punonjesve qe punojne ne ate shtet si me poshte:

zgjidhje

select ct.country_name,count(e.employee_id) as no_employees

from employees e join departments d on e.department_id=d.department_id

right outer join locations l on l.location_id=d.location_id

join countries ct on l.country_id=ct.country_id

group by ct.country_name

order by count(e.employee_id) desc;

Self - Join

Ushtrim 1

Per cdo punonjes afishoni te dhenat e tij dhe numrin e punonjesve qe raportojne drejtperdrejt tek ai, pra jane vartesit e tij te drejtperdrejte

zgjidhje

select shefa.employee_id,shefa.first_name,shefa.last_name,

count(*) as vartes

from employees shefa

join employees vartes

on shefa.employee_id =vartes.manager_id

group by shefa.employee_id, shefa.first_name, shefa.last_name;

(Non Equi Join)

Ushtrim 1

Te afishojme per cdo punonjes emrin,mbiemrin,pagen, si edhe emrin,mbiemrin,pagen e punonjesit qe ka page me te larte.

Zgjidhje

select keqpaguar.first_name,keqpaguar.last_name,keqpaguar.salary,

mirepaguar.first_name,mirepaguar.last_name,mirepaguar.salary

from

employees keqpaguar

join

employees mirepaguar

on (keqpaguar.salary<mirepaguar.salary)

order by keqpaguar.salary ;