SQL
SQL
ORDER BY DEPARTAMENTOS;
21. Como ayuda familiar se van a dar a los empleados con 3 o ms hijos
una paga extra de 100 euros por cada hijo (a partir del tercero inclusive).
Muestre por orden alfabtico los empleados, salario, paga extra y salario
total (salario + paga extra).
SELECT NOMEM, SALAR, 100*(NUMHI-2) EXTRA,
SALAR+100*(NUMHI-2) TOTAL
FROM TEMPLE
WHERE NUMHI >=3
ORDER BY NOMEM;
22. Llamemos presupuesto medio mensual de un departamento al resultado
de dividir su presupuesto anual por 12. Mostrar por orden alfabtico el
nombre de departamento, su presupuesto anual (PRESU est almacenado
en miles de euros) y su presupuesto mensual.
SELECT NOMDE, PRESU*1000 "P. ANUAL",
PRESU*1000/12 "P. MENSUAL"
FROM TDEPTO
ORDER BY NOMDE;
SELECT NOMDE, TO_CHAR(PRESU*1000, '999G999') "P.
ANUAL",
TO_CHAR(PRESU*1000/12, '999G999D99') "P. MENSUAL"
FROM TDEPTO
ORDER BY NOMDE;
23. Suponiendo que en los prximos tres aos el coste de vida va a
aumentar un 6 % anual y que se suben los salarios en la misma proporcin,
hallar para los empleados con ms de 4 hijos su nombre y su sueldo anual,
actual y para cada uno de los prximos tres aos, clasificados por orden
alfabtico.
SELECT NOMEM, SALAR * 12 ACTUAL, SALAR * 12 * 1.06
"AO 1",
SALAR * 12 * 1.06 * 1.06 "AO 2",
SALAR * 12 * 1.06 * 1.06 * 1.06 "AO 3"
FROM TEMPLE
WHERE NUMHI > 4
ORDER BY NOMEM;
24. Hallar por orden alfabtico los nombres de los empleados tales que si
se les da una gratificacin de 1000 euros por hijo, el total de esta
gratificacn no supera a la dcima parte del salario anual. No se deben
mostrar aquellos empleados que no tienen hijos.
SELECT NOMEM FROM TEMPLE
WHERE NUMHI!=0 AND NUMHI * 1000 <= (SALAR*12)/10
ORDER BY NOMEM;
25. Para los empleados del departamento 112 hallar el nombre y el salario
total de cada uno (salario ms comisin), por orden de salario total
decreciente, y por orden alfabtico dentro de salario total. (preste atencin
si la comisin fuera nula)
SELECT NOMEM, SALAR + NVL(COMIS,0) Total
FROM TEMPLE
WHERE NUMDE = 112
ORDER BY 2 DESC, NOMEM;
26. Hallar por orden de nmero de empleado el nombre y salario total
(salario ms comisin) de los empleados cuyo salario total supera a 3000
euros mensuales.
SELECT NUMEM, NOMEM, SALAR + COMIS
FROM TEMPLE
WHERE SALAR + COMIS > 3000
ORDER BY NUMEM;
/* Teniendo en cuenta cuando COMIS es NULL */
/* OjO! --> SALAR + NULL = NULL */
SELECT NUMEM, NOMEM, SALAR + NVL(COMIS,0), SALAR,
COMIS
FROM TEMPLE
WHERE SALAR + NVL(COMIS,0) > 3000
ORDER BY NUMEM;
27. Obtener los nmeros de los departamentos en los que haya algn
empleado cuya comisin supere al 20 % de su salario.
SELECT DISTINCT NUMDE
FROM TEMPLE
WHERE COMIS > 0.2 * SALAR
ORDER BY NUMDE;
28. Obtener los nombres de los departamentos que no dependen
funcionalmente de otro (columna DEPDE en la tabla TDEPTO).
SELECT NOMDE FROM TDEPTO
WHERE DEPDE IS NULL;
29. Para los empleados que no tienen comisin obtener por orden
alfabtico el nombre y el cociente entre su salario y el nmero de hijos
(evite la divisin por cero).
SELECT NOMEM, SALAR / NUMHI
FROM TEMPLE
WHERE COMIS IS NULL AND NUMHI <> 0
ORDER BY NOMEM;
SELECT NOMEM, SALAR / DECODE (NUMHI, 0, 1, NUMHI)
FROM TEMPLE
WHERE COMIS IS NULL
ORDER BY NOMEM;
30. Se desea hacer un regalo de un 1% del salario a los empleados en el da
de su onomstica. Hallar por orden alfabtico los nombres y cuanta de los
regalos en euros para los que celebren su santo el da de San Honorio.
SELECT NOMEM, SALAR * 0.01
FROM TEMPLE
WHERE NOMEM LIKE '%,%HONORIO%' OR
NOMEM LIKE '%,%HONORIA%'
ORDER BY NOMEM;
departamento 100.
SELECT MAX(SALAR), MIN(SALAR)
FROM TEMPLE
WHERE NUMDE=100;
75. Hallar el nmero de empleados y de extensiones
telefnicas del departamento 112.
/* OjO al DISTINCT */
SELECT COUNT(*) EMPLEADOS, COUNT(DISTINCT EXTEL)
EXTENSIONES
FROM TEMPLE
WHERE NUMDE=112;
76. Hallar el nmero de empleados del departamento 112,
as como cuntas comisiones hay y la suma y media de sus
comisiones.
SELECT COUNT(*) EMPLEADOS, COUNT(COMIS)
COMISIONES, SUM(COMIS), AVG(COMIS)
FROM TEMPLE
WHERE NUMDE=112;
77. Hallar la media del nmero de hijos de los empleados
del departamento 121.
SELECT AVG(NUMHI) FROM TEMPLE
WHERE NUMDE=121;
78. Obtener el nmero de empleados de los departamentos
100 y 110.
SELECT COUNT(*) FROM TEMPLE
WHERE NUMDE=100 OR NUMDE=110;
SELECT COUNT(*) FROM TEMPLE
WHERE NUMDE IN (100, 110);
79. Hallar para cada departamento (por su nmero) el
salario medio. Ordenar el resultado de mayor a menor
salario medio.
SELECT NUMDE, AVG(SALAR) "Salario medio"
FROM TEMPLE
GROUP BY NUMDE
ORDER BY 2 DESC;
80. Obtener el nmero de empleados por departamento.
Ordene el resultado de mayor a menor nmero de
empleados y a igual nmero de empleados por orden
creciente de departamento.
SELECT NUMDE, COUNT(*) EMPLEADOS
FROM TEMPLE
GROUP BY NUMDE
ORDER BY EMPLEADOS DESC, NUMDE;
81. Calcule la media de hijos por departamento ordenado
por nmero de departamento.
SELECT NUMDE, AVG(NUMHI)
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE;
82. Calcule la suma total y el mximo de hijos por
departamento ordenado por nmero de departamento.
SELECT NUMDE, SUM(NUMHI), MAX(NUMHI)
FROM TEMPLE
GROUP BY NUMDE
ORDER BY NUMDE;
83. Calcule el nmero de empleados que tienen el mismo
salario ordenados por salario decreciente.
SALAR * 0.01 *
MONTHS_BETWEEN(TO_DATE('31/12/1989','DD/MM/YYYY')
+ 2, FECIN)/12 AS REGALO
FROM TEMPLE
WHERE NUMEM = 420 OR NUMEM = 490;
/* Si el regalo fuera solamente por aos completos
*/
SELECT NOMEM, TO_DATE('31/12/1989','DD/MM/YYYY')
+ 2 AS BODA,
TO_DATE('31/12/1989','DD/MM/YYYY') + 23 AS
FIN,
SALAR * 0.01 * TRUNC
(MONTHS_BETWEEN(TO_DATE('31/12/1989','DD/MM/YYYY')
+ 2, FECIN)/12) AS REGALO
FROM TEMPLE
WHERE NUMEM = 420 OR NUMEM = 490;
89. En qu da del ao (nmero de orden) y en qu da de
la semana entr en la empresa el empleado que se llama
Aureo?
SELECT FECIN, TO_CHAR(FECIN, 'DDD'),
TO_CHAR(FECIN, 'DAY')
FROM TEMPLE
WHERE NOMEM LIKE '%AUREO';
90. Hallar cuntos departamentos hay y el presupuesto
anual medio de ellos. (PRESU est almacenado en miles de
euros)
SELECT COUNT(*) DEPARTAMENTOS, AVG(PRESU) * 1000
"P. Anual"
FROM TDEPTO;
91. Como la pregunta anterior, pero para los
departamentos que no tienen director en propiedad.
SELECT COUNT(*) DEPARTAMENTOS, AVG(PRESU) * 1000
"P. Anual"
FROM TDEPTO
WHERE TIDIR <>'P';
92. Para los departamentos 111 y 112 hallar la media de
los aos de servicio de sus empleados en el da de hoy.
(Suponga que se est en la fecha 5/7/90)
SELECT AVG (MONTHS_BETWEEN('5/7/90', FECIN)/12)
FROM TEMPLE
WHERE NUMDE = 111 OR NUMDE = 112;
/* Si solamente se contabilizan aos de servicio
completos */
SELECT AVG ( TRUNC(MONTHS_BETWEEN('5/7/90',
FECIN)/12) )
FROM TEMPLE
WHERE NUMDE = 111 OR NUMDE = 112;
SELECT AVG ( TRUNC( (TO_DATE('5/7/90') FECIN)/365 ) )
FROM TEMPLE
WHERE NUMDE = 111 OR NUMDE = 112;
93. Para los departamentos 111 y 112 hallar la media de
los aos de servicio de sus empleados el da 31/12/86.
SELECT AVG (MONTHS_BETWEEN('31/12/86', FECIN)/12)
FROM TEMPLE
WHERE (NUMDE = 111 OR NUMDE = 112) AND
FECIN < '31/12/86';
94. Para los empleados que han ingresado en la empresa
en los ltimos 5 aos, hallar la edad media en aos
cumplidos de la edad a la que han ingresado. (Suponga que
se est en la fecha 5/7/90)
SELECT
FECNA)/12 ) )
FROM TEMPLE
WHERE FECIN BETWEEN add_months( to_date('5/7/90'),
-12*5 ) AND '5/7/90';
SELECT MAX(SUM(SALAR))
FROM TEMPLE
GROUP BY NUMDE;