icatalin

tema sapt 6

Mar 27th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 4.35 KB | None | 0 0
  1. 1. Sa se afiseze codul, numele departamentului si numarul de angajati care lucreaza in acel departament pentru:
  2.  a) departamentele in care lucreaza mai putin de 4 angajati;
  3.  b) departamentul care are numarul maxim de angajati.
  4. a)
  5. SELECT department_id, department_name, COUNT(employee_id)
  6. FROM departments dep JOIN employees emp USING (department_id)
  7. GROUP BY department_id, department_name
  8. HAVING COUNT(employee_id) < 4;
  9. b)
  10. SELECT department_id, department_name, COUNT(employee_id)
  11. FROM departments dep JOIN employees emp USING (department_id)
  12. GROUP BY department_id, department_name
  13. HAVING COUNT(employee_id) = ( SELECT MAX(COUNT(employee_id))
  14.                                 FROM employees
  15.                                 GROUP BY department_id);
  16.  
  17. 2. Sa se afiseze salariatii care au fost angajati în aceeaşi zi a lunii în care cei mai multi dintre salariati au fost angajati.
  18.  
  19. SELECT employee_id, last_name, TO_CHAR(hire_date, ‘dd’)
  20. FROM employees
  21. WHERE TO_CHAR(hire_date,'dd') IN
  22. (SELECT TO_CHAR(hire_date,'dd')
  23. FROM employees
  24. GROUP BY TO_CHAR(hire_date,'dd')
  25. HAVING COUNT(*)=(SELECT MAX(COUNT(*))
  26. FROM employees
  27. GROUP BY TO_CHAR(hire_date,'dd')));
  28.  
  29. 3. Sa se afiseze numarul departamentelor care au cel puţin 15 angajaţi.
  30.  
  31. SELECT COUNT(COUNT(department_id))
  32. FROM employees
  33. GROUP BY department_id
  34. HAVING COUNT(employee_id) > 15;
  35.  
  36. 4. Să se calculeze comisionul mediu din firmă, luând în considerare toate liniile din tabel.
  37.  
  38. SELECT avg(nvl(commission_pct,0))
  39. FROM employees;
  40.  
  41. 5. Scrieţi o cerere pentru a afişa 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 corespunzător. Rezultatul va apărea sub forma de mai jos (rezolvati in 2 variante DECODE + subcereri in SELECT):
  42.  Job         Dep30          Dep50           Dep80            Total
  43.  
  44. Varianta 1:
  45.  
  46. SELECT job_id, SUM(DECODE(department_id, 30, salary)) Dep30,
  47.         SUM(DECODE(department_id, 50, salary)) Dep50,
  48.         SUM(DECODE(department_id, 80, salary)) Dep80,
  49.         SUM(salary) Total
  50. FROM employees
  51. GROUP BY job_id;
  52.  
  53. Varianta 2:
  54.  
  55. SELECT job_id, (SELECT SUM(salary)
  56. FROM employees
  57. WHERE department_id = 30
  58. AND job_id = e.job_id) Dep30,
  59. (SELECT SUM(salary)
  60. FROM employees
  61. WHERE department_id = 50
  62. AND job_id = e.job_id) Dep50,
  63. (SELECT SUM(salary)
  64. FROM employees
  65. WHERE department_id = 80
  66. AND job_id = e.job_id) Dep80,
  67. SUM(salary) Total
  68. FROM employees e
  69. GROUP BY job_id;
  70.  
  71. 6. Să se creeze o cerere prin care să se afişeze numărul total de angajaţi şi, din acest total, numărul celor care au fost angajaţi în 1997, 1998, 1999 si 2000. Denumiti capetele de tabel in mod corespunzator. (folosind subcereri in clauza SELECT)
  72.  
  73. SELECT COUNT(employee_id),
  74.             (SELECT COUNT(employee_id)
  75.             FROM employees
  76.             WHERE to_char(hire_date, 'yyyy') = 1997) AS "1997"
  77.             ,
  78.             (SELECT COUNT(employee_id)
  79.             FROM employees
  80.             WHERE to_char(hire_date, 'yyyy') = 1998) AS "1998"
  81.             ,
  82.             (SELECT COUNT(employee_id)
  83.             FROM employees
  84.             WHERE to_char(hire_date, 'yyyy') = 1999) AS "1999"
  85. FROM employees
  86. GROUP BY 'orice';
  87.  
  88. 7. Folosind subcereri in clauza FROM, să se afişeze codul, numele departamentului şi suma salariilor pe departamente.
  89.  
  90. SELECT d.department_id, department_name,a.suma
  91. FROM departments d, (SELECT department_id ,SUM(salary) suma
  92. FROM employees
  93. GROUP BY department_id) a
  94. WHERE d.department_id =a.department_id;
  95.  
  96. 8. Pentru fiecare departament, să se afişeze numele acestuia, numele şi salariul celor mai prost plătiţi angajaţi din cadrul său (folosind subcereri in clauza FROM).
  97.  
  98. --(se cer 3 solutii: subcerere sincronizata, subcerere nesincronizata si subcerere în clauza FROM).
  99. --1--corelata
  100. SELECT last_name,salary,department_id
  101. FROM employees e
  102. WHERE salary = (SELECT min(salary) FROM employees WHERE department_id=e.department_id);
  103.  
  104. --2--in from
  105. SELECT last_name,salary,e.department_id
  106. FROM employees e join
  107.      (SELECT min(salary) salariu,department_id FROM employees GROUP BY department_id ) a
  108.       on (e.department_id=a.department_id)
  109. WHERE e.salary=a.salariu;
  110.  
  111. --3--nesincronizata
  112. SELECT last_name,salary,department_id
  113. FROM employees
  114. WHERE (department_id,salary) IN (SELECT department_id,min(salary) FROM employees GROUP BY department_id);
Add Comment
Please, Sign In to add comment