Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF2: Llenguatges SQL / Solucions Repàs consultes HR»

De wikiserver
Dreceres ràpides: navegació, cerca
Línia 135: Línia 135:
 
   +-----------------------+------------------+
 
   +-----------------------+------------------+
  
   SELECT TO_CHAR(e.hire_date,'YYYY') "Año", COUNT(*)
+
   SELECT d.department_name "Nombre departamento", SUM((e.salary*12)+NVL(e.comm))"Coste año 2015"
   FROM employees e
+
   FROM departments d, employees e
   GROUP BY TO_CHAR(e.hire_date,'YYYY');  
+
  WHERE d.department_id=e.department_id
 +
   GROUP BY d.department_name;  
  
  
Línia 145: Línia 146:
 
   |  Nombre departamento  |  Sueldo medio  | Salario maximo  |  
 
   |  Nombre departamento  |  Sueldo medio  | Salario maximo  |  
 
   +------------------------+-----------------+-----------------+
 
   +------------------------+-----------------+-----------------+
 +
 +
 +
  SELECT d.department_name "Nombre departamento", AVG(e.salary) "Suedo medio", MAX(e.salary) "Salario máximo"
 +
  FROM departments d, employees e
 +
  WHERE d.department_id=e.department_id
 +
  GROUP BY 1;

Revisió del 17:46, 18 març 2015

Solucions Repàs Consultes BBDD HR

1. Muestra el nombre, apellido i salario mensual de los empleados que cobren mas que Jennifer ordenado por salario descendiente

 +--------------------+-------------------+
 | Nombre i apellido  | Salario Mensual   | 
 +--------------------+-------------------+


 SELECT e.first_name||' '||e.last_name "Nombre i apellido"s, e.salary"Salario Mensual"
 FROM employees e
 WHERE e.salary >ANY (SELECT e.salary
                    FROM employees e
                    WHERE UPPER(e.first_name)='JENNIFER');

2. Para cada departamento Muestra el nombre del empleado/s que cobran menos.

 +------------------------+-------------------+
 | Nombre departamentodo  | Nombre empleado   | 
 +------------------------+-------------------+


 SELECT e.department_id"Nombre departamento", e.first_name ||' '|| e.last_name "Nombre empleado"
 FROM e.employees e
 WHERE (e.department.id,e.salary) IN (SELECT e.department_id, min(e.sal)
                                    FROM employees e
                                    GROUP BY e.department);


3. Para cada región muestra cuantos países hay. Ordena por numero de países ascendentemente.

 +-----------------+-------------------+
 | Nombre Región   | Numero de paises  | 
 +-----------------+-------------------+


 SELECT r.region_name "Nombre Region", count(*)"Numero de paises"
 FROM regions r,countries c
 WHERE r.region_id=c.region_id
 GROUP BY r.region_name 
 ORDER BY 2 ASC;


4. Muestra el nombre de los departamentos i nombre de su jefe, que se encuentran fuera de EEUU.

 +--------------+-------+-----------------+
 | Nombre Dep   | Jefe  |  Sueldo Mensual | 
 +------------- +-------+-----------------+
 SELECT d.department_name "Nombre Dep", e.first_name "Jefe", e.salary "Sueldo Mensual"
 FROM countries c, locations l, departments d, employees e
 WHERE c.country_id=l.country_id
 AND l.location_id=d.location.id
 AND d.manager_id=e.employee_id
 AND c.country_name <> 'United States Of America'; 


5. Mostrar el nombre de los países que empiezan o termina en una “a" junto con el nombre de la region a la que pertencen.

 +-------------+--------+
 | Nombre pais | Region | 
 +-------------+--------+
 SELECT c.country_name "Nombre país", r.region_name "Region"
 FROM countries c, regions r
 WHERE c.region_id=r.region_id
 AND UPPER(c.country_name) LIKE 'A%'
 OR UPPER(c.country_name) LIKE '%A';

6. Muestra el nombre de cada empleado en mayúsculas junto con el de su respectivo jefe.

 +-----------------+-------------+
 | Nombre empleado | Nombre jefe | 
 +-----------------+-------------+
 SELECT UPPER(e.first_name) "Nombre empleado", j.first_name "Nombre jefe" 
 FROM employees e, employees j
 WHERE e.manager_id=j.employee_id
 

7. Para cada jefe muestra cuantos empleados tiene a su cargo.

 +-----------------+------------------+
 | Nombre jefe     | Numero empleados | 
 +-----------------+------------------+
 SELECT e.first_name "Nombre jefe", COUNT(*)"Numero empleados"
 FROM employees e  
 GROUP BY (e.manager_id);
 

8. Cantidad de empleados que han ingresado en la empresa en cada año.

 +-------+------------------+
 |  Año  | Numero empleados | 
 +-------+------------------+
 SELECT TO_CHAR(e.hire_date,'YYYY') "Año", COUNT(*)
 FROM employees e
 GROUP BY TO_CHAR(e.hire_date,'YYYY'); 
 

9. Para cada empleado y cada puesto ocupado los meses que ha trabajado en dicho puesto.

 +--------------+---------+------------------+
 |  Nombre emp  |  Puesto | Meses trabajados |
 +--------------+---------+------------------+
 SELECT e.first_name "Nombre empleado",jh.job_id "puesto", ROUND(MONTHS_BETWEEN(jh.start-date,NVL(jh.end-date,SYSDATE))"Meses trabajados"
 FROM employees e, jobs j, job_hystory jh 
 WHERE e.job_id=j.job_id
 AND e.employee_id=jh.employee_id;


10. El nombre de los jefes de cada departamento y su telefono.

 +------------------------+------------------+---------------+
 |  Nombre departamento   |  Nombre jefe     | Telefono jefe |
 +------------------------+------------------+---------------+
 SELECT d.department_name "Nombre departamento", e.first_name "Nombre jefe", e.phone_number "telefono jefe"
 FROM employees e, departments d
 WHERE d.manager_id=e.employee_id; 


11. El costo de cada departamento en el ultimo año (suma de salario *12 de todos los empleados mas comisiones)

 +------------------------+-----------------+
 |  Nombre departamento  |  Coste año YYYY  |   
 +-----------------------+------------------+
 SELECT d.department_name "Nombre departamento", SUM((e.salary*12)+NVL(e.comm))"Coste año 2015"
 FROM departments d, employees e
 WHERE d.department_id=e.department_id
 GROUP BY d.department_name; 


12. Para cada departamento el promedio de sueldo, el salario maximo i el mínimo pero sólo mostrar los departamentos con promedio superior a la media de todos los departamentos.

 +------------------------+-----------------+-----------------+ 
 |  Nombre departamento   |  Sueldo medio   | Salario maximo  | 
 +------------------------+-----------------+-----------------+


 SELECT d.department_name "Nombre departamento", AVG(e.salary) "Suedo medio", MAX(e.salary) "Salario máximo"
 FROM departments d, employees e
 WHERE d.department_id=e.department_id
 GROUP BY 1;