milardovich

Prácticas GD 2013 1,2,3,4,5,7

Nov 11th, 2013
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 24.53 KB | None | 0 0
  1. /*
  2.  * Práctica SQL
  3.  * Autores de la práctica: Ing. Vilma Martin, Ing. Adrián Meca, Ing. María Inés Seguenzia
  4.  * Versión: 9
  5.  * Entorno donde se realizaron los ejercicios:
  6.  * MariaDB versión 10.0.4
  7.  * phpMyAdmin 3.4.11.1
  8.  */
  9.  
  10. --  Práctica Número I: Sentencia SELECT
  11. USE agencia_personal;
  12.  
  13. -- Práctica I » Ejercicio I
  14. SHOW FULL COLUMNS FROM empresas;
  15. SELECT * FROM empresas;
  16.  
  17. -- Práctica I » Ejercicio II
  18. SHOW FULL COLUMNS FROM personas;
  19. SELECT apellido, nombre, fecha_registro_agencia FROM personas;
  20.  
  21. -- Práctica I » Ejercicio III
  22. SELECT * FROM titulos ORDER BY tipo_titulo ASC;
  23.  
  24. -- Práctica I » Ejercicio IV
  25. SELECT * FROM personas WHERE dni = 28675888;
  26.  
  27. -- Práctica I » Ejercicio V
  28. SELECT * FROM personas WHERE dni = 27890765 or dni = 29345777 or dni = 31345778;
  29.  
  30. -- Práctica I » Ejercicio VI
  31. SELECT * FROM personas WHERE apellido LIKE 'G%';
  32.  
  33. -- Práctica I » Ejercicio VII
  34. SELECT sueldo, dni, fecha_nacimiento FROM personas, contratos WHERE personas.dni = contratos.dni AND fecha_nacimiento BETWEEN '1980-01-01' AND '2000-01-01' AND fecha_finalizacion_contrato IS NULL;
  35. /*
  36.  * Nota: la consulta funciona perfectamente pero en la base de datos no hay ningún registro que cumpla con estas condiciones.
  37.  * Podemos sacar la condición de que el contrato no esté caducado para ver algunos resultados:
  38.  */
  39. SELECT sueldo, dni, fecha_nacimiento FROM personas, contratos WHERE personas.dni = contratos.dni AND fecha_nacimiento BETWEEN '1980-01-01' AND '2000-01-01';
  40.  
  41. -- Práctica I » Ejercicio VIII
  42. SELECT * FROM solicitudes_empresas ORDER BY fecha_solicitud ASC;
  43.  
  44. -- Práctica I » Ejercicio IX
  45. SELECT * FROM antecedentes WHERE fecha_hasta IS NULL ORDER BY fecha_desde ASC;
  46.  
  47. -- Práctica I » Ejercicio X
  48. SELECT * FROM antecedentes WHERE fecha_hasta IS NOT NULL AND fecha_hasta BETWEEN '2006-06-01' AND '2006-12-31';
  49.  
  50. -- Práctica I » Ejercicio XI
  51. SELECT nro_contrato AS 'Nro Contrato', dni AS 'DNI', sueldo AS 'Salario', cuit AS 'CUIT' FROM contratos WHERE sueldo > 2000 AND (cuit = '30-10504876-5' OR cuit = '30-21098732-4');
  52.  
  53. -- Práctica I » Ejercicio XII
  54. SELECT * FROM titulos WHERE desc_titulo LIKE 'Tecnico%';
  55.  
  56. -- Práctica I » Ejercicio XIII
  57. SELECT * FROM solicitudes_empresas WHERE cod_cargo = 6 OR fecha_solicitud > '2007-09-21' OR sexo = 'Femenino';
  58.  
  59. -- Práctica I » Ejercicio XIV
  60. SELECT * FROM contratos WHERE sueldo > 2000 AND fecha_finalizacion_contrato IS NULL;
  61.  
  62. -- Práctica I » Ejercicio XV
  63. SELECT * FROM solicitudes_empresas WHERE cod_cargo = 6 OR sexo IS NULL OR fecha_solicitud > '2007-02-21';
  64.  
  65. --  Práctica Número II: INNER JOIN
  66.  
  67. -- Práctica II » Ejercicio I
  68. SELECT t1.nombre, t1.apellido, t2.sueldo, t1.dni FROM personas AS t1 INNER JOIN contratos AS t2 ON t1.dni = t2.dni;
  69.  
  70. -- Práctica II » Ejercicio II
  71. SELECT t1.fecha_registro_agencia, t1.dni, t2.nro_contrato, t2.fecha_incorporacion, IFNULL(t2.fecha_caducidad,"Sin Fecha") FROM personas AS t1 INNER JOIN contratos AS t2 ON t2.dni = t1.dni INNER JOIN empresas AS t3 ON t3.cuit = t2.cuit AND (t3.razon_social = 'Viejos Amigos' OR t3.razon_social = 'Traigame eso');
  72.  
  73. -- Práctica II » Ejercicio III
  74. SELECT t1.razon_social, t1.direccion, t1.e_mail, t3.desc_cargo, t2.anios_experiencia FROM empresas AS t1 INNER JOIN solicitudes_empresas AS t2 ON t1.cuit = t2.cuit INNER JOIN cargos AS t3 ON t3.cod_cargo = t2.cod_cargo ORDER BY t2.fecha_solicitud ASC, t3.desc_cargo ASC;
  75.  
  76. -- Práctica II » Ejercicio IV
  77. SELECT t1.dni, t1.nombre, t1.apellido, t3.desc_titulo FROM personas AS t1 INNER JOIN personas_titulos AS t2 ON t1.dni = t2.dni INNER JOIN titulos AS t3 ON t3.cod_titulo = t2.cod_titulo WHERE (t3.tipo_titulo = 'Educacion no formal') OR (t3.desc_titulo = 'Bachiller');
  78.  
  79. -- Práctica II » Ejercicio V
  80. SELECT t1.nombre, t1.apellido, t3.desc_titulo FROM personas AS t1 INNER JOIN personas_titulos AS t2 ON t1.dni = t2.dni INNER JOIN titulos AS t3 ON t3.cod_titulo = t2.cod_titulo;
  81.  
  82. -- Práctica II » Ejercicio VI
  83. SELECT CONCAT(t1.apellido,' ',t1.nombre,' tiene como referencia a ',IFNULL(t2.persona_contacto,"No tiene contacto"),' cuando trabajo en ',t3.razon_social) FROM personas AS t1 INNER JOIN antecedentes AS t2 ON t2.dni = t1.dni INNER JOIN empresas AS t3 ON t3.cuit = t2.cuit;
  84.  
  85. -- Práctica II » Ejercicio VII
  86. SELECT t1.razon_social, t2.fecha_solicitud, t3.desc_cargo, IFNULL(t2.edad_minima,'Sin Especificar'),IFNULL(t2.edad_maxima,'Sin Especificar'),t4.resultado_final FROM empresas AS t1 INNER JOIN solicitudes_empresas AS t2 ON t1.cuit = t2.cuit INNER JOIN cargos AS t3 ON t2.cod_cargo = t3.cod_cargo INNER JOIN entrevistas AS t4 ON t1.cuit = t4.cuit;
  87.  
  88. -- Práctica II » Ejercicio VIII
  89. SELECT CONCAT(t1.nombre,' ',t1.apellido) AS Postulante, t3.desc_cargo AS Cargo FROM personas AS t1 INNER JOIN antecedentes AS t2 ON t1.dni = t2.dni INNER JOIN cargos as t3 ON t2.cod_cargo = t3.cod_cargo;
  90.  
  91. -- Práctica II » Ejercicio IX
  92. SELECT t2.razon_social AS 'Razón Social', t3.desc_cargo AS 'Cargo', t5.desc_evaluacion as 'Descripción de Evaluación', t4.resultado AS 'resultado' FROM entrevistas AS t1 INNER JOIN empresas AS t2 ON t1.cuit = t2.cuit INNER JOIN cargos AS t3 ON t1.cod_cargo = t3.cod_cargo INNER JOIN entrevistas_evaluaciones AS t4 ON t1.nro_entrevista = t4.nro_entrevista INNER JOIN evaluaciones AS t5 ON t4.cod_evaluacion = t5.cod_evaluacion;
  93.  
  94. -- Práctica II » Ejercicio X
  95. SELECT t1.cuit, t1.razon_social, IFNULL(t2.fecha_solicitud,'Sin Solicitud'), IFNULL(t3.desc_cargo,'Sin Solicitud') FROM empresas AS t1 LEFT JOIN solicitudes_empresas AS t2 ON t1.cuit = t2.cuit LEFT JOIN cargos AS t3 ON t2.cod_cargo = t3.cod_cargo;
  96.  
  97. -- Práctica II » Ejercicio XI
  98. SELECT t1.cuit, t1.razon_social, t3.desc_cargo, IFNULL(t5.dni, 'Sin Contrato') AS DNI, IFNULL(t5.apellido, 'Sin Contrato') AS Apellido, IFNULL(t5.nombre, 'Sin Contrato') AS Nombre FROM empresas AS t1 INNER JOIN solicitudes_empresas AS t2 ON t1.cuit = t2.cuit INNER JOIN cargos AS t3 ON t2.cod_cargo = t3.cod_cargo LEFT JOIN contratos AS t4 ON t1.cuit = t4.cuit AND t2.fecha_solicitud = t4.fecha_solicitud LEFT JOIN personas AS t5 ON t4.dni = t5.dni;
  99.  
  100. -- Práctica II » Ejercicio XII
  101. SELECT t1.cuit, t3.razon_social, t4.desc_cargo FROM solicitudes_empresas AS t1 LEFT JOIN contratos AS t2 ON t1.cuit = t2.cuit AND t1.fecha_solicitud = t2.fecha_solicitud INNER JOIN empresas AS t3 ON t1.cuit = t3.cuit INNER JOIN cargos AS t4 ON t1.cod_cargo = t4.cod_cargo WHERE nro_contrato IS NULL;
  102.  
  103. -- Práctica II » Ejercicio XIII
  104. SELECT t1.desc_cargo, IFNULL(t2.dni,'Sin Antecedente'), IFNULL(t3.apellido,'Sin Antecedente'), t4.razon_social FROM cargos AS t1 LEFT JOIN antecedentes AS t2 ON t1.cod_cargo = t2.cod_cargo LEFT JOIN personas AS t3 ON t2.dni = t3.dni LEFT JOIN empresas AS t4 ON t2.cuit = t4.cuit;
  105.  
  106. --  Práctica Número II.II: SELF JOIN
  107. USE afatse;
  108.  
  109. -- Práctica II.II » Ejercicio XIV
  110. SELECT t1.cuil AS 'Cuil Instructor', t1.nombre, t1.apellido, t1.cuil_supervisor AS 'Cuil Supervisor', t2.nombre, t2.apellido FROM instructores AS t1 INNER JOIN instructores AS t2 ON t1.cuil_supervisor = t2.cuil;
  111.  
  112. -- Práctica II.II » Ejercicio XV
  113. SELECT t1.cuil AS 'Cuil Instructor', t1.nombre, t1.apellido, t1.cuil_supervisor AS 'Cuil Supervisor', t2.nombre, t2.apellido FROM instructores AS t1 LEFT JOIN instructores AS t2 ON t1.cuil_supervisor = t2.cuil;
  114.  
  115. -- Práctica II.II » Ejercicio XVI
  116. /*
  117.  * Nota: creo que está bien, en la práctica el resultado de prueba está mal, como fecha de corrección figuran algunas del 2007
  118.  */
  119. SELECT t6.cuil, t6.nombre, t6.apellido, t5.nombre, t5.apellido, t1.nom_plan, t1.nro_curso, t2.nombre, t2.apellido, t1.nro_examen, t1.fecha_evaluacion, t1.nota FROM evaluaciones AS t1 INNER JOIN alumnos AS t2 ON t1.dni = t2.dni AND t1.fecha_evaluacion BETWEEN '2008-01-01' AND '2008-12-31' INNER JOIN cursos_instructores AS t3 ON t1.nro_curso = t3.nro_curso AND t1.cuil = t3.cuil INNER JOIN instructores AS t5 ON t4.cuil = t5.cuil LEFT JOIN instructores AS t6 ON t5.cuil = t6.cuil_supervisor ORDER BY t5.cuil ASC;
  120.  
  121. --  Práctica Número III: Funciones de presentación de datos
  122. USE agencia_personal;
  123.  
  124. -- Práctica III » Ejercicio I
  125. /*
  126.  * Nota: va a tirar una consulta vacía porque los registros son del año 2008
  127.  */
  128. SELECT nro_contrato, fecha_incorporacion, fecha_finalizacion_contrato, ADDDATE(fecha_incorporacion, INTERVAL 30 DAY) FROM contratos WHERE fecha_finalizacion_contrato > NOW();
  129.  
  130. -- Práctica III » Ejercicio II
  131. SELECT t1.nro_contrato, t2.razon_social, t3.apellido, t3.nombre, t1.fecha_incorporacion, IFNULL(t1.fecha_caducidad,'Contrato Vigente') FROM contratos AS t1 INNER JOIN empresas AS t2 ON t1.cuit = t2.cuit INNER JOIN personas AS t3 ON t1.dni = t3.dni;
  132.  
  133. -- Práctica III » Ejercicio III
  134. SELECT *,DATE_DIFF(fecha_finalizacion_contrato,fecha_caducidad) AS diferencia FROM contratos WHERE fecha_caducidad < fecha_finalizacion_contrato;
  135.  
  136. -- Práctica III » Ejercicio IV
  137. SELECT t3.cuit, t3.razon_social, t3.direccion, t1.anio_contrato, t1.mes_contrato, t1.importe_comision, ADDDATE(DATE(NOW()), INTERVAL 2 MONTH) as Vencimiento FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato AND t1.fecha_pago IS NULL INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit;
  138.  
  139. -- Práctica III » Ejercicio V
  140. SELECT CONCAT(nombre,' ',apellido) AS 'Nombre y Apellido', fecha_nacimiento, DAY(fecha_nacimiento) AS dia, MONTH(fecha_nacimiento) AS mes, YEAR(fecha_nacimiento) AS 'año' FROM personas;
  141.  
  142. --  Práctica Número IV: GROUP BY - HAVING
  143.  
  144. -- Práctica IV » Ejercicio I
  145. SELECT t3.razon_social, SUM(t1.importe_comision) FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t3.cuit = t2.cuit GROUP BY t3.razon_social HAVING t3.razon_social = 'Traigame eso';
  146.  
  147. -- Práctica IV » Ejercicio II
  148. SELECT t3.razon_social, SUM(t1.importe_comision) FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t3.cuit = t2.cuit GROUP BY t3.razon_social;
  149.  
  150. -- Práctica IV » Ejercicio III
  151. /*
  152.  * NO FUNCA, PREGUNTAR
  153.  */
  154. SELECT t2.nombre_entrevistador, t1.cod_evaluacion, AVG(t1.resultado) AS 'Promedio', STDDEV(t1.resultado) AS 'Desviación Estándar', VARIANCE(t1.resultado) AS 'Varianza' FROM entrevistas_evaluaciones AS t1 INNER JOIN entrevistas AS t2 ON t1.nro_entrevista = t2.nro_entrevista GROUP BY t1.cod_evaluacion ORDER BY AVG(t1.resultado) DESC, STDDEV(t1.resultado) ASC;
  155.  
  156. -- Práctica IV » Ejercicio IV
  157. SELECT t2.nombre_entrevistador, t1.cod_evaluacion, AVG(t1.resultado) AS Promedio, STDDEV(t1.resultado) AS 'Desviación Estándar', VARIANCE(t1.resultado) AS 'Varianza' FROM entrevistas_evaluaciones AS t1 INNER JOIN entrevistas AS t2 ON t1.nro_entrevista = t2.nro_entrevista AND t2.nombre_entrevistador = 'Angelica Doria' GROUP BY t1.cod_evaluacion HAVING Promedio > 71 ORDER BY AVG(t1.resultado) DESC, STDDEV(t1.resultado) ASC;
  158.  
  159. -- Práctica IV » Ejercicio V
  160. SELECT nombre_entrevistador, COUNT(*) FROM entrevistas WHERE nombre_entrevistador = 'Angelica Doria' AND fecha_entrevista BETWEEN '2007-10-01' AND '2007-10-31' GROUP BY nombre_entrevistador;
  161.  
  162. -- Práctica IV » Ejercicio VI
  163. SELECT nombre_entrevistador, COUNT(*) AS cantidad FROM entrevistas GROUP BY nombre_entrevistador ORDER BY cantidad DESC;
  164.  
  165. -- Práctica IV » Ejercicio VII
  166. SELECT nombre_entrevistador, COUNT(*) AS cantidad FROM entrevistas GROUP BY nombre_entrevistador HAVING cantidad > 1 ORDER BY cantidad DESC;
  167.  
  168. -- Práctica IV » Ejercicio VIII
  169. SELECT nro_contrato, COUNT(*) AS total, COUNT(fecha_pago) AS cant_pagadas, COUNT(*)-COUNT(fecha_pago) AS cant_a_pagar FROM comisiones GROUP BY nro_contrato;
  170.  
  171. -- Práctica IV » Ejercicio IX
  172. SELECT nro_contrato, COUNT(nro_contrato), COUNT(fecha_pago)*100/COUNT(*) AS porcentaje_pagadas, (COUNT(*)-COUNT(fecha_pago))*(100/COUNT(*)) AS porcentaje_a_pagar FROM comisiones GROUP BY nro_contrato;
  173.  
  174. -- Práctica IV » Ejercicio X
  175. SELECT COUNT(t1.mes_contrato) AS meses_pendientes, t3.razon_social FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit WHERE t1.fecha_pago IS NULL GROUP BY t2.cuit;
  176.  
  177. -- Práctica IV » Ejercicio XI
  178. SELECT t2.cuit, t2.razon_social, COUNT(t1.cuit) AS cant_solicitudes FROM solicitudes_empresas AS t1 INNER JOIN empresas AS t2 ON t1.cuit = t2.cuit GROUP BY t1.cuit;
  179.  
  180. -- Práctica IV » Ejercicio XII
  181. /*
  182.  * Revisar
  183.  */
  184. SELECT t3.cuit, t3.razon_social, t1.cod_cargo, COUNT(*) FROM solicitudes_empresas AS t1 INNER JOIN contratos AS t2 ON t1.cod_cargo = t2.cod_cargo AND t1.fecha_solicitud = t2.fecha_solicitud INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t1.cod_cargo
  185.  
  186. -- Práctica IV » Ejercicio XIII
  187. SELECT t1.cuit, t1.razon_social, IFNULL(COUNT(t2.cuit),'0') AS 'Cant de Personas' FROM empresas AS t1 LEFT JOIN antecedentes AS t2 ON t1.cuit = t2.cuit GROUP BY t2.cuit
  188.  
  189. -- Práctica IV » Ejercicio XIV
  190. SELECT t1.cod_cargo, t1.desc_cargo, COUNT(t2.cod_cargo) AS 'Cant. de Solicitudes' FROM cargos AS t1 LEFT JOIN solicitudes_empresas AS t2 ON t1.cod_cargo = t2.cod_cargo GROUP BY t1.cod_cargo ORDER BY COUNT(t2.cod_cargo) DESC
  191.  
  192. -- Práctica IV » Ejercicio XV
  193. SELECT t1.cod_cargo, t1.desc_cargo, COUNT(t2.cod_cargo) AS 'Cant. de Solicitudes' FROM cargos AS t1 LEFT JOIN solicitudes_empresas AS t2 ON t1.cod_cargo = t2.cod_cargo GROUP BY t1.cod_cargo HAVING COUNT(t2.cod_cargo) < 2 ORDER BY COUNT(t2.cod_cargo) DESC
  194.  
  195. --  Práctica Número V: Subconsultas y Tablas Temporales
  196.  
  197. -- Práctica V » Ejercicio I
  198. CREATE TEMPORARY TABLE tmp_empresas (
  199.     SELECT t1.* FROM empresas AS t1 INNER JOIN contratos AS t2 ON t1.cuit = t2.cuit INNER JOIN personas AS t3 ON t2.dni = t3.dni WHERE t3.nombre = 'Stefanía' AND t3.apellido = 'Lopez'
  200. );
  201.  
  202. SELECT t1.dni, t1.apellido, t1.nombre FROM personas AS t1 INNER JOIN contratos AS t2 ON t1.dni = t2.dni INNER JOIN tmp_empresas AS t3 ON t2.cuit = t3.cuit;
  203.  
  204. DROP TEMPORARY TABLE IF EXISTS tmp_empresas;
  205.  
  206. -- Práctica V » Ejercicio II
  207. SELECT * FROM contratos AS t1 INNER JOIN personas AS t2 ON t1.dni = t2.dni WHERE t1.sueldo > (SELECT MAX(t3.sueldo) FROM contratos AS t3 INNER JOIN empresas AS t4 ON t3.cuit = t4.cuit WHERE t4.razon_social = 'Viejos Amigos');
  208.  
  209. -- Práctica V » Ejercicio III
  210. SELECT t2.cuit, t1.dni, t2.sueldo FROM personas AS t1 INNER JOIN contratos AS t2 ON t1.dni = t2.dni WHERE t2.sueldo > (SELECT AVG(t3.sueldo) AS promedio FROM contratos AS t3 WHERE t3.cuit = t2.cuit GROUP BY t3.cuit)
  211.  
  212. -- Práctica V » Ejercicio IV
  213. SELECT t1.apellido, t1.nombre FROM personas AS t1 INNER JOIN personas_titulos AS t2 ON t1.dni = t2.dni INNER JOIN titulos AS t3 ON t2.cod_titulo = t3.cod_titulo WHERE t1.dni NOT IN (SELECT t4.dni FROM personas AS t4 INNER JOIN personas_titulos AS t5 ON t4.dni = t5.dni INNER JOIN titulos AS t6 ON t5.cod_titulo = t6.cod_titulo WHERE t6.tipo_titulo = 'Educacion no formal' OR t6.tipo_titulo = 'Terciario') GROUP BY t1.dni;
  214.  
  215. -- Práctica V » Ejercicio V
  216. SELECT t3.razon_social, SUM(t1.importe_comision),AVG(t1.importe_comision) FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t3.cuit HAVING AVG(t1.importe_comision) > (SELECT AVG(t4.importe_comision) FROM comisiones AS t4 INNER JOIN contratos AS t5 ON t4.nro_contrato = t5.nro_contrato INNER JOIN empresas AS t6 ON t5.cuit = t6.cuit WHERE t6.razon_social = 'Traigame eso' GROUP BY t6.cuit);
  217.  
  218. -- Práctica V » Ejercicio VI
  219. SELECT t3.razon_social, t4.nombre, t4.apellido, t2.nro_contrato, t1.mes_contrato, t1.anio_contrato, t1.importe_comision FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit INNER JOIN personas AS t4 ON t2.dni = t4.dni WHERE t1.importe_comision < (SELECT AVG(t5.importe_comision) FROM comisiones AS t5)
  220.  
  221. -- Práctica V » Ejercicio VII
  222. /*
  223.  * Este ejercicio se puede resolver sin usar tablas temporales ni subconsultas
  224.  */
  225. SELECT AVG(t1.importe_comision) AS promedio_comisiones, t3.razon_social,t3.cuit FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t2.cuit HAVING promedio_comisiones = MAX(promedio_comisiones) OR promedio_comisiones = MIN(promedio_comisiones);
  226.  
  227. -- Práctica V » Ejercicio VIII
  228. SELECT t3.razon_social, AVG(t1.importe_comision) FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t3.cuit HAVING AVG(t1.importe_comision) > (SELECT AVG(t4.importe_comision) FROM comisiones AS t4);
  229.  
  230. -- Práctica V.II » Ejercicio IX
  231. USE DATABASE afatse;
  232.  
  233. /*
  234.  * Este ejercicio se puede resolver sin usar tablas temporales ni subconsultas
  235.  */
  236. SELECT t1.cuil,t2.fecha_ini FROM cursos_instructores AS t1 INNER JOIN cursos AS t2 ON t1.nro_curso = t2.nro_curso AND t1.nom_plan = t2.nom_plan  WHERE t2.nom_plan = 'Marketing 1' GROUP BY t1.nro_curso HAVING YEAR(t2.fecha_ini) = 2007 AND YEAR(t2.fecha_ini) != 2009;
  237.  
  238. -- Práctica V.II » Ejercicio X
  239. /*
  240.  * Este ejercicio se puede resolver sin usar tablas temporales ni subconsultas
  241.  */
  242. SELECT t1.nro_curso, t1.fecha_ini, t2.nom_plan, COUNT(t2.dni), t1.cupo FROM cursos AS t1 INNER JOIN inscripciones AS t2 ON t1.nro_curso = t2.nro_curso AND t1.nom_plan = t2.nom_plan WHERE YEAR(t1.fecha_ini) > 2008 GROUP BY t2.nom_plan HAVING ((COUNT(t2.dni)/t1.cupo)*100) < 80;
  243.  
  244. -- Práctica V.II » Ejercicio XI
  245. CREATE TEMPORARY TABLE inscripciones_tmp (
  246.     SELECT COUNT(*) AS total FROM inscripciones
  247. );
  248. SELECT t1.nom_plan, COUNT(*), ((COUNT(*)/total)*100) AS '% total' FROM inscripciones_tmp AS t3, cursos AS t1 INNER JOIN inscripciones AS t2 ON t1.nro_curso = t2.nro_curso AND t1.nom_plan = t2.nom_plan GROUP BY t2.nom_plan;
  249.  
  250. DROP TEMPORARY TABLE IF EXISTS inscripciones_tmp;
  251.  
  252. -- Práctica V.II » Ejercicio XII
  253. CREATE TEMPORARY TABLE promedios_tmp (
  254.     SELECT AVG(nota) AS promedio_total,nro_curso FROM evaluaciones GROUP BY nro_curso
  255. );
  256.  
  257. SELECT t2.nombre, AVG(t1.nota), t3.promedio_total FROM evaluaciones AS t1 INNER JOIN alumnos AS t2 ON t1.dni = t2.dni INNER JOIN promedios_tmp AS t3 ON t1.nro_curso = t3.nro_curso GROUP BY t1.dni;
  258.  
  259. DROP TEMPORARY TABLE IF EXISTS promedios_tmp;
  260.  
  261. -- Práctica V.II » Ejercicio XIII
  262. /*
  263.  * Esta consulta devuelve un valor nulo, pero se puede cambiar el año tanto en la tabla temporal como en la consulta para ver que funciona
  264.  */
  265. CREATE TEMPORARY TABLE valores_planes_tmp (
  266.     SELECT AVG(valor_plan) as promedio_actual FROM valores_plan WHERE YEAR(fecha_desde_plan) = '2009'
  267. );
  268.  
  269. SELECT t1.nom_plan, AVG(t2.valor_plan), t3.promedio_actual FROM valores_planes_tmp AS t3, evaluaciones AS t1 INNER JOIN valores_plan AS t2 ON t1.nom_plan = t2.nom_plan AND YEAR(t2.fecha_desde_plan) = YEAR(t1.fecha_evaluacion) WHERE YEAR(t1.fecha_evaluacion) = '2009' AND AVG(t2.valor_plan) > promedio_actual GROUP BY t1.nom_plan;
  270.  
  271. DROP TEMPORARY TABLE IF EXISTS valores_planes_tmp;
  272.  
  273. -- Práctica V.II » Ejercicio XIV
  274. CREATE TEMPORARY TABLE principito_tmp(
  275.     SELECT COUNT(*) AS veces_principito FROM inscripciones AS t1 INNER JOIN alumnos AS t2 ON t1.dni = t2.dni WHERE t2.nombre = 'Antoine de' AND t2.apellido = 'Saint-Exupery' GROUP BY t1.dni
  276. );
  277.  
  278. SELECT (COUNT(*)-t3.veces_principito), t3.veces_principito, t2.nombre, t2.apellido FROM principito_tmp AS t3, inscripciones AS t1 INNER JOIN alumnos AS t2 ON t1.dni = t2.dni GROUP BY t1.dni HAVING COUNT(*) > t3.veces_principito;
  279.  
  280. -- Práctica V.II » Ejercicio XV
  281. SELECT t1.nombre, t1.apellido, t1.dni FROM alumnos AS t1 WHERE dni NOT IN (SELECT dni FROM cuotas WHERE fecha_pago IS NULL GROUP BY dni);
  282.  
  283. -- Práctica V.II » Ejercicio XVI
  284. /*
  285.  * REVISAR, ESTÁ MAL
  286.  */
  287. CREATE TEMPORARY TABLE alumnos_al_dia_tmp(
  288.     SELECT t1.dni, t1.nombre, t1.apellido FROM alumnos AS t1 WHERE t1.dni NOT IN (SELECT dni FROM cuotas WHERE fecha_pago IS NULL GROUP BY dni)
  289. );
  290.  
  291. SELECT t2.nombre, t2.apellido, t1.nom_plan FROM evaluaciones AS t1 INNER JOIN alumnos_al_dia_tmp AS t2 ON t1.dni = t2.dni WHERE t1.nota = MAX(t1.nota) GROUP BY t2.dni;
  292.  
  293. -- Práctica V.II » Ejercicio XVII
  294. /*
  295.  * WTF?
  296.  */
  297.  
  298. --  Práctica Número VII: Variables
  299.  
  300. -- Práctica VII » Ejercicio 1
  301. SELECT AVG(importe_comision) FROM comisiones WHERE fecha_pago IS NOT NULL INTO @promedio_pagos_comisiones;
  302. SELECT @promedio_pagos_comisiones;
  303.  
  304. -- Práctica VII » Ejercicio II
  305. SELECT AVG(importe_comision), COUNT(importe_comision), SUM(importe_comision) FROM comisiones WHERE fecha_pago IS NOT NULL INTO @promedio_pagos_comisiones,@cant_pagos_comisiones,@suma_pagos_comisiones;
  306.  
  307. SELECT @promedio_pagos_comisiones, @cant_pagos_comisiones, @suma_pagos_comisiones;
  308.  
  309. -- Práctica VII » Ejercicio III
  310. SELECT AVG(importe_comision) FROM comisiones WHERE fecha_pago IS NOT NULL INTO @prom;
  311.  
  312. SELECT t3.razon_social, MONTH(t2.fecha_incorporacion), YEAR(t2.fecha_incorporacion), t2.nro_contrato, t4.nombre, t4.apellido, t1.importe_comision FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit INNER JOIN personas AS t4 ON t2.dni = t4.dni WHERE t1.importe_comision < @prom;
  313.  
  314. -- Práctica IV » Ejercicio IV
  315. SELECT AVG(importe_comision) FROM comisiones WHERE fecha_pago IS NOT NULL INTO @promedio_pagos_comisiones;
  316.  
  317. SELECT IFNULL(SUM(t1.importe_comision),'0'), t3.razon_social, t3.cuit FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t2.cuit HAVING SUM(t1.importe_comision) < @promedio_pagos_comisiones;
  318.  
  319. -- Práctica VII » Ejercicio V
  320. SELECT SUM(t1.importe_comision) FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit WHERE t3.razon_social = 'Traigame eso' GROUP BY t3.cuit INTO @comisiones_traigame_eso;
  321.  
  322. SELECT t3.razon_social, SUM(t1.importe_comision) FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t3.cuit HAVING SUM(t1.importe_comision) > @comisiones_traigame_eso;
  323.  
  324. -- Práctica VII » Ejercicio VI
  325. /*
  326.  * Animalada provisoria forever
  327.  */
  328. SELECT SUM(t1.importe_comision) AS max_total_comisiones FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t2.cuit ORDER BY max_total_comisiones DESC LIMIT 1 INTO @max_importe_comisiones;
  329.  
  330. SELECT SUM(t1.importe_comision) AS max_total_comisiones FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t2.cuit ORDER BY max_total_comisiones ASC LIMIT 1 INTO @min_importe_comisiones;
  331.  
  332. SELECT t3.razon_social, SUM(t1.importe_comision) FROM comisiones AS t1 INNER JOIN contratos AS t2 ON t1.nro_contrato = t2.nro_contrato INNER JOIN empresas AS t3 ON t2.cuit = t3.cuit GROUP BY t3.cuit HAVING SUM(t1.importe_comision) IN (@max_importe_comisiones,@min_importe_comisiones);
  333.  
  334. -- Práctica VII » Ejercicio VII
  335. SELECT MAX(sueldo) FROM contratos INTO @max_sueldo;
  336.  
  337. SELECT t1.sueldo, t2.cuit, t2.razon_social, t3.dni, t3.nombre, t3.apellido FROM contratos AS t1 INNER JOIN empresas AS t2 ON t1.cuit = t2.cuit INNER JOIN personas AS t3 ON t1.dni = t3.dni WHERE t1.sueldo = @max_sueldo;
  338.  
  339. -- Práctica VII » Ejercicio VIII
  340. SELECT t1.nro_contrato AS cantidad FROM contratos AS t1 INNER JOIN comisiones AS t2 ON t1.nro_contrato = t2.nro_contrato GROUP BY t2.nro_contrato ORDER BY SUM(t1.sueldo) DESC LIMIT 1 INTO @mayor_contrato;
  341.  
  342. SELECT t3.nombre, t3.apellido, t2.razon_social, t1.nro_contrato, t1.sueldo, t1.porcentaje_comision, @mayor_contrato, (t1.sueldo/t1.porcentaje_comision) AS pago FROM contratos AS t1 INNER JOIN empresas AS t2 ON t1.cuit = t2.cuit INNER JOIN personas AS t3 ON t1.dni = t3.dni WHERE t1.nro_contrato = @mayor_contrato GROUP BY t1.nro_contrato;
  343.  
  344. -- Práctica VII.II » Ejercicio IX
  345. USE DATABASE afatse;
  346. SELECT AVG(valor_plan) FROM valores_plan WHERE YEAR(fecha_desde_plan) = '2009' INTO @promedio_valor_plan;
  347.  
  348. SELECT t2.nom_plan, t2.detalle, t1.valor_plan FROM valores_plan AS t1 INNER JOIN plan_temas AS t2 ON t1.nom_plan = t2.nom_plan WHERE YEAR(fecha_desde_plan) = '2009' AND t1.valor_plan > @promedio_valor_plan;
  349.  
  350. -- Práctica VII.II » Ejercicio X
  351. SELECT COUNT(*) AS veces_principito FROM inscripciones AS t1 INNER JOIN alumnos AS t2 ON t1.dni = t2.dni WHERE t2.nombre = 'Antoine de' AND t2.apellido = 'Saint-Exupery' GROUP BY t1.dni INTO @veces_principito;
  352.  
  353. SELECT *,COUNT(t1.dni) AS total_inscripciones, (COUNT(t1.dni)-@veces_principito) AS diferencia FROM inscripciones AS t1 GROUP BY t1.dni HAVING total_inscripciones > @veces_principito;
  354.  
  355. -- Práctica VII.II » Ejercicio XI
  356. SELECT nom_plan FROM valores_plan WHERE YEAR(fecha_desde_plan) = '2009' ORDER BY valor_plan ASC LIMIT 1 INTO @mas_barato;
  357.  
  358. SELECT * FROM plan_capacitacion WHERE nom_plan = @mas_barato;
Advertisement
Add Comment
Please, Sign In to add comment