complejas iii

8
1. Visualizar el número de empleados de cada departamento. Utilizar GROUP BY para agrupar por departamento. select dept_no,count(*) from emple group by dept_no; 2. Visualizar los departamentos con más de 5 empleados. Utilizar GROUP BY para agrupar por departamento y HAVING para establecer la condición sobre los grupos. select emple.dept_no,count(*) from emple,depart where emple.dept_no=depart.dept_no group by emple.dept_no having count(*)>5; 3. Hallar la media de los salarios de cada departamento. Utilizar la función avg y GROUP BY. select emple.dept_no,round(avg(salario),2) from emple,depart where emple.dept_no=depart.dept_no group by emple.dept_no; 4.Visualizar el nombre de los empleados vendedores del departamento ʻVENTASʼ. (Nombre del departamento=ʼVENTASʼ, oficio=ʼVENDEDORʼ). select apellido from emple,depart where emple.dept_no=depart.dept_no and dnombre='VENTAS' and oficio='VENDEDOR'; 5. Visualizar el número de vendedores del departamento ʻVENTASʼ. Utilizar la función COUNT sobre la consulta anterior. select count(*) from emple,depart where emple.dept_no=depart.dept_no and dnombre='VENTAS' and oficio='VENDEDOR'; 6. Visualizar los oficios de los empleados del departamento ʻVENTASʼ. select apellido,oficio from emple,depart where emple.dept_no=depart.dept_no and dnombre='VENTAS';

Upload: juan-jose-garcia

Post on 17-Feb-2015

243 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Complejas III

1. Visualizar el número de empleados de cada departamento. Utilizar GROUP BY para agrupar por departamento.

select dept_no,count(*)from emplegroup by dept_no;

2. Visualizar los departamentos con más de 5 empleados. Utilizar GROUP BY para agrupar por departamento y HAVING para establecer la condición sobre los grupos.

select emple.dept_no,count(*)from emple,departwhere emple.dept_no=depart.dept_nogroup by emple.dept_nohaving count(*)>5;

3. Hallar la media de los salarios de cada departamento. Utilizar la función avg y GROUP BY.

select emple.dept_no,round(avg(salario),2)from emple,departwhere emple.dept_no=depart.dept_nogroup by emple.dept_no;

4.Visualizar el nombre de los empleados vendedores del departamento ʻVENTASʼ. (Nombre del departamento=ʼVENTASʼ, oficio=ʼVENDEDORʼ).

select apellidofrom emple,departwhere emple.dept_no=depart.dept_noand dnombre='VENTAS' and oficio='VENDEDOR';

5. Visualizar el número de vendedores del departamento ʻVENTASʼ. Utilizar la función COUNT sobre la consulta anterior.

select count(*)from emple,departwhere emple.dept_no=depart.dept_noand dnombre='VENTAS' and oficio='VENDEDOR';

6. Visualizar los oficios de los empleados del departamento ʻVENTASʼ.

select apellido,oficiofrom emple,departwhere emple.dept_no=depart.dept_noand dnombre='VENTAS';

Page 2: Complejas III

7. A partir de la tabla EMPLE, visualizar el número de empleados de cada departamento cuyo oficio sea ʻEMPLEADOʼ. Utilizar GROUP BY para agrupar por departamento. En la cláusula WHERE habrá que indicar que oficio es ʻEMPLEADOʼ.

select emple.dept_no, count(*)from emple, departwhere emple.dept_no=depart.dept_no and oficio='EMPLEADO'group by emple.dept_nounionselect depart.dept_no, 0from departwhere dept_no not in (select dept_no from emple where oficio='EMPLEADO');

8. Visualizar el departamento con más empleados.

Create view numemppordept asselect count(*) as numempfrom emplegroup by dept_no;

select *from departwhere dept_no = (select dept_no from emple group by dept_no having count(*)=(select max(numemp) from numemppordept));

9. Mostrar los departamentos cuya suma de salarios sea mayor que la media de salarios de todos los empleados.

select dept_no,avg(salario)from emplegroup by dept_nohaving avg(salario)>(select avg(salario) from emple);

10. Para cada oficio obtener la suma de salarios.

select oficio,sum(salario)from emplegroup by oficio;

11.Visualizar la suma de salarios de cada oficio del departamento ʻVENTASʼ.

select oficio,sum(salario)from emple, departwhere emple.dept_no=depart.dept_no and dnombre='VENTAS'group by oficio;

Page 3: Complejas III

12. Visualizar el número de departamento que tenga más empleados cuyo oficio sea empleado.

Create view numemplepordepart asselect count(*) as numfrom emplewhere oficio='EMPLEADO'group by dept_no;

select dept_nofrom emplewhere oficio='EMPLEADO'group by dept_nohaving count(*)=(select max(num) from numemplepordepart);

13. Mostrar el número de oficios distintos de cada departamento.

select count(distinct oficio)from emple;

14. Mostrar los departamentos que tengan más de dos personas trabajando en la misma profesión.

select dept_no, oficio, count(*) as numfrom emplegroup by dept_no,oficiohaving count(*)>2;

15. Dada la tabla HERRAMIENTAS, visualizar por cada estantería la suma de las unidades.

select estanteria,sum(unidades)from herramientasgroup by estanteria;

16. Visualizar la estantería con más unidades de la tabla HERRAMIENTAS.

Create view numherrporestasselect sum(unidades) as numherrfrom herramientasgroup by estanteria;

select estanteria,sum(unidades)from herramientasgroup by estanteriahaving sum(unidades)=(select max(numherr) from numherrporest);

17. Mostrar el número de médicos que pertenecen a cada hospital, ordenado por número descendente de hospital.

select hospitales.nombre,count(*)from hospitales, medicoswhere hospitales.cod_hospi=medicos.cod_hospigroup by hospitales.cod_hospiorder by hospitales.cod_hospi desc;

Page 4: Complejas III

18. Realizar una consulta en la que se muestre por cada hospital el nombre de las especialidades que tiene.

select nombre,especialidadfrom hospitales,medicoswhere hospitales.cod_hospi=medicos.cod_hospi;

19. Realizar una consulta en la que aparezca por cada hospital y en cada especialidad el número de médicos (tendrás que partir de la consulta anterior y utilizar GROUP BY).

select nombre,especialidad,count(*)from hospitales,medicoswhere hospitales.cod_hospi=medicos.cod_hospigroup by nombre,especialidad;

20. Obtener por cada hospital el número de empleados.

select hospitales.cod_hospi,nombre,count(*)from personas,hospitaleswhere personas.cod_hospital=hospitales.cod_hospigroup by personas.cod_hospital;

21. Obtener por cada especialidad el número de trabajadores.

select especialidad,count(*)from medicosgroup by especialidad;

22. Visualizar la especialidad que tenga más médicos.

Create view nummedporespasselect count(*) as numfrom medicosgroup by especialidad;

select especialidadfrom medicosgroup by especialidadhaving count(*)=(select max(num) from nummedporesp);

23. ¿Cuál es el nombre del hospital que tiene mayor número de plazas?

Select nombrefrom hospitaleswhere nºplazas =(select max(nºplazas) from hospitales);

24. Visualizar las diferentes estanterías de la tabla HERRAMIENTAS ordenados descendentemente por estantería.

select distinct(estanteria)from herramientasorder by estanteria desc;

Page 5: Complejas III

25. Averiguar cuántas unidades tiene cada estantería.

select estanteria,sum(unidades)from herramientasgroup by estanteria;

26. Visualizar las estanterías que tengan más de 15 unidades.

select estanteria, sum(unidades)from herramientasgroup by estanteriahaving sum(unidades)>15;

27. ¿Cuál es la estantería que tiene más unidades?

Create view numunidporestasselect sum(unidades) as numfrom herramientasgroup by estanteria;

select estanteriafrom herramientasgroup by estanteriahaving sum(unidades)=(select max(num) from numunidporest);

28. A partir de las tablas EMPLE y DEPART mostrar los datos del departamento que no tiene ningún empleado.

Select *from departwhere dept_no not in (select dept_no from emple);

29. Mostrar el número de empleados de cada departamento. En la salida se debe mostrar también los departamentos que no tienen ningún empleado.

select depart.dept_no,count(emple.emp_no)from emple right outer join depart on (emple.dept_no=depart.dept_no)group by depart.dept_no;

30. Obtener la suma de salarios de cada departamento, mostrando las columnas DEPT_NO, SUMA DE SALARIOS y DNOMBRE. En el resultado también se deben mostrar los departamentos que no tienen asignados Empleados.

select depart.dept_no, sum(salario) "Suma salario", dnombrefrom emple RIGHT OUTER JOIN depart ON emple.dept_no=depart.dept_nogroup by depart.dept_no;

31. Utilizar la función IFNULL en la consulta anterior para que en el caso de que un departamento no tenga empleados, aparezca como suma de salarios el valor 0.

select depart.dept_no, IFNULL(sum(salario),0) "Suma salario", dnombrefrom emple RIGHT OUTER JOIN depart ON emple.dept_no=depart.dept_nogroup by depart.dept_no;

Page 6: Complejas III

32. Obtener el número de médicos que pertenecen a cada hospital, mostrando las columnas COD_HOSPITAL, NOMBRE y NÚMERO DE MÉDICOS. En el resultado deben aparecer también los datos de los hospitales que no tienen médicos.

Select hospitales.cod_hospi, nombre, count(medicos.dni)from hospitales left outer join medicoson medicos.cod_hospi = hospitales.cod_hospigroup by hospitales.cod_hospi, nombre;