Practica 5 1. Las funciones de grupo trabajan a través de muchas filas para producir un resultado por grupo. Verdadero 2. Las funciones de grupo incluyen los valores nulos en los cálculos. Falso. 3. La cláusula WHERE restringe las filas antes de que se incluyan en los cálculos de los grupos. Verdadero 4. Muestre el salario más alto, más bajo, la suma y el promedio de los salarios de todos los empleados. Etiquete las columnas como Máximo, Mínimo, Suma y Promedio, respectivamente. Redondee el resultado al entero más cercano. SELECT MAX(emp_salario) "Maximo", MIN(emp_salario) minimo, SUM(emp_salario) suma,ROUND(AVG(emp_salario),0) promedio FROM empleados; /*5. Modifique la consulta del punto 4 para que muestre el salario más alto, más bajo, la suma y el promedio, por cada tipo de cargo.*/ SELECT emp_cargo, MAX(emp_salario) "Maximo", MIN(emp_salario) minimo, SUM(emp_salario) suma, ROUND(AVG(emp_salario),0) promedio FROM empleados GROUP BY emp_cargo; /*6. Escriba una consulta para mostrar el número de personas que tienen el mismo trabajo.*/ SELECT emp_cargo, COUNT(*) FROM empleados GROUP BY emp_cargo; /*7. Determine el número de jefes sin listarlos. Etiquete la columna como Número de Jefes.*/ SELECT (COUNT(DISTINCT E.EMP_NOMBRE))"NUMERO DE JEFES" FROM EMPLEADOS E JOIN EMPLEADOS J ON(E.EMP_ID=J.EMP_JEFE); /*8. Escriba una consulta que muestre la diferencia entre el salario más alto y el más bajo. Etiquete la columna como DIFERENCIA.*/ SELECT MAX(emp_salario)-MIN(emp_salario) diferencia FROM empleados; /*9. Muestre el número del jefe y el salario más bajo del empleado para ese jefe. Excluya a quienes no se les conoce el jefe y también los grupos donde el salario mínimo es menor a $1’300.000. Ordene de forma descendente por salario.*/ SELECT DISTINCT emp_jefe, MIN(emp_salario) minimo FROM empleados where emp_jefe is not null GROUP BY emp_jefe HAVING min(emp_salario)>1300000 ORDER BY minimo desc; /*10. Escriba una consulta que muestre cada nombre y localización del departamento, número de empleados y el promedio del salario de todos los empleados de ese departamento. Etiquete las columnas como Nombre, Localización, Número de Empleados y Salario respectivamente. Redondear el promedio del salario a un decimal.*/ SELECT DISTINCT d.dep_nombre Nombre, d.dep_localizacion Localizacion, COUNT(e.emp_id) "numero de empleados", ROUND(AVG(e.emp_salario),0) salario FROM empleados e join departamentos d on (e.dep_id=d.dep_id) GROUP BY d.dep_nombre, d.dep_localizacion; /*11. Cree una consulta que muestre el total de empleados, y de ese total, el número de empleados contratados en el 2001, 2002, 2003 y 2004. Etiquete las columnas de forma adecuada.*/ SELECT COUNT(*),SUM(DECODE(TO_CHAR(emp_fechacontrato,'yyyy'),2001,1,0))"2001" ,SUM(DECODE(TO_CHAR(emp_fechacontrato,'yyyy'),2002,1,0))"2002", SUM(DECODE(TO_CHAR(emp_fechacontrato,'yyyy'),2003,1,0))"2003",SUM(DECODE(TO_CHAR(em p_fechacontrato,'yyyy'),2004,1,0))"2004" FROM empleados ; /*12. Cree una consulta matriz para mostrar el cargo y el salario total de ese cargo, por departamento, para los departamentos 10, 20 y 30. Se debe mostrar una fila por cargo y como columnas: el nombre del cargo, departamento 10, departamento 20 y departamento 30.*/ SELECT e.emp_cargo cargo, sum(DECODE(d.dep_id, 10,e.emp_salario))"departamento 10", sum(DECODE(d.dep_id, 20,e.emp_salario))"departamento 20", sum(DECODE(d.dep_id, 30,e.emp_salario))"departamento 30", SUM(e.emp_salario) total FROM empleados e join departamentos d on (e.dep_id=d.dep_id) GROUP BY e.emp_cargo; Practica 6 /*1. Escriba una consulta que muestre el nombre y su fecha de contrato de los empleados que trabajan en el mismo número de departamento que JIMENEZ, excluya a JIMENEZ.*/ SELECT DECODE(d.dep_id, 20, e.emp_nombre || ' ' || e.emp_fechacontrato) "20" FROM empleados e join departamentos d on (e.dep_id=d.dep_id) WHERE d.dep_id IN( SELECT e.dep_id FROM empleados e WHERE e.emp_nombre='JIMENEZ' ) and not e.emp_nombre in ( SELECT e.emp_nombre FROM empleados e WHERE e.emp_nombre='JIMENEZ' ); /*2. Cree una consulta que muestre el número y el nombre de todos los empleados que ganen más que el salario promedio. Ordenar de forma ascendente por salario.*/ SELECT emp_id,emp_nombre,emp_salario FROM empleados WHERE emp_salario > ( SELECT ROUND(AVG(emp_salario),0) FROM empleados ); /*3. Escriba una consulta que muestre el número y nombre del empleado, para todos los empleados que trabajen en cualquiera de los departamentos que trabaja cualquier empleado que el nombre contenga la letra P.*/ SELECT DECODE(d.dep_nombre, 'CONTABILIDAD', e.emp_id|| ' '|| e.emp_nombre) "CONTABILIDAD", DECODE(d.dep_nombre, 'INVESTIGACION',e.emp_id|| ' '|| e.emp_nombre) "INVESTIGACION", DECODE(d.dep_nombre, 'OPERACIONES',e.emp_id|| ' '|| e.emp_nombre) "OPERACIONES", DECODE(d.dep_nombre, 'VENTAS',e.emp_id|| ' '|| e.emp_nombre) "VENTAS" FROM empleados e JOIN departamentos d on (d.dep_id=e.dep_id) WHERE e.emp_nombre=ANY ( SELECT e.emp_nombre FROM empleados e WHERE e.emp_nombre LIKE '%P%' /*4. Muestre el nombre, número de departamento y cargo de todos los empleados cuya localización del departamento sea CALI.*/ SELECT empleados.emp_nombre,departamentos.dep_id,empleados.emp_cargo FROM departamentos JOIN empleados on (departamentos.dep_id=empleados.dep_id) WHERE departamentos.dep_localizacion in( SELECT departamentos.dep_localizacion FROM departamentos where departamentos.dep_localizacion='CALI' ); /*5. Muestre el nombre y el salario de cada empleado que tiene como jefe a LOPEZ.*/ SELECT emp_nombre, emp_salario FROM empleados where emp_jefe in ( SELECT emp_id FROM empleados WHERE emp_nombre='LOPEZ' ); /*6. Muestre el número del departamento, nombre y cargo de cada empleado en el departamento CONTABILIDAD.*/ SELECT d.dep_id,e.emp_nombre,e.emp_cargo FROM empleados e join departamentos d on (e.dep_id=d.dep_id) WHERE d.dep_nombre in( SELECT dep_nombre FROM departamentos WHERE dep_nombre='CONTABILIDAD' ); /* 7. Modifique el punto 3 para mostrar número, nombre y salario del empleado, de todos los empleados que ganen más que el salario promedio y que trabajen en cualquiera de los departamentos que trabaja cualquier empleado que contenga en su nombre la letra P. */ SELECT DECODE(d.dep_nombre, 'CONTABILIDAD', e.emp_id|| ' '|| e.emp_nombre|| ' '||e.emp_salario) "CONTABILIDAD", DECODE(d.dep_nombre, 'INVESTIGACION',e.emp_id|| ' '|| e.emp_nombre|| ' '||e.emp_salario) "INVESTIGACION", DECODE(d.dep_nombre, 'OPERACIONES',e.emp_id|| ' '|| e.emp_nombre|| ' '||e.emp_salario) "OPERACIONES", DECODE(d.dep_nombre, 'VENTAS',e.emp_id|| ' '|| e.emp_nombre|| ' '||e.emp_salario) "VENTAS" FROM empleados e JOIN departamentos d on (d.dep_id=e.dep_id) WHERE e.emp_salario>( SELECT ROUND(AVG(emp_salario),0) "Average" FROM empleados ) and e.emp_nombre=ANY ( SELECT e.emp_nombre FROM empleados e WHERE e.emp_nombre LIKE '%P%' );