Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/02/2013, 17:32
Avatar de sebandrescc2
sebandrescc2
 
Fecha de Ingreso: diciembre-2012
Mensajes: 45
Antigüedad: 11 años, 11 meses
Puntos: 0
Como devolver registros sin valores

Hola,

Tengo 2 tablas y consulta:
Código MySQL:
Ver original
  1. CREATE TABLE `i_alumnos` (
  2.   `id_alumno` int(11) unsigned NOT NULL AUTO_INCREMENT,
  3.   `id_curso` int(11) NOT NULL,
  4.   `nombre` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  5.   `apellido` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  6.   `rut` varchar(10) COLLATE utf8_spanish_ci NOT NULL,
  7.   `direccion` varchar(150) COLLATE utf8_spanish_ci NOT NULL,
  8.   `comuna` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  9.   `telefono_fijo` int(9) NOT NULL,
  10.   `telefono_mpvil` int(10) NOT NULL,
  11.   `fecha_nac` date NOT NULL,
  12.   `apoderado` varchar(150) COLLATE utf8_spanish_ci NOT NULL,
  13.   `mail_apo` varchar(150) COLLATE utf8_spanish_ci NOT NULL,
  14.   `mail_alum` varchar(150) COLLATE utf8_spanish_ci NOT NULL,
  15.   `comentarios` longtext COLLATE utf8_spanish_ci NOT NULL,
  16.   PRIMARY KEY (`id_alumno`)
  17. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
  18.  
  19. --
  20. -- Volcado de datos para la tabla `i_alumnos`
  21. --
  22.  
  23. INSERT INTO `i_alumnos` (`id_alumno`, `id_curso`, `nombre`, `apellido`, `rut`, `direccion`, `comuna`, `telefono_fijo`, `telefono_mpvil`, `fecha_nac`, `apoderado`, `mail_apo`, `mail_alum`, `comentarios`) VALUES
  24. (1, 1, 'Raquel', 'Castro Galarce', '16024692-0', 'Venus 9511', 'La Florida', 24936613, 78413664, '2003-04-17', 'Sebastián Contreras Castro', '[email protected]', '[email protected]', 'Alumno de prueba'),
  25. (2, 1, 'Sebastián Andrés', 'Contreras Castro', '15449027-2', 'Venus 9511', 'La Florida', 24936613, 78413664, '2003-07-15', 'Raquel Castro Galarce', '[email protected]', '[email protected]', 'Alumno de prueba'),
  26. (3, 1, 'Eduardo Alfredo', 'Morgado Cifuentes', '13558740-k', 'Calle 2 829', 'La Florida', 24565854, 87452165, '2003-08-27', 'Guillermo Barría', '[email protected]', '[email protected]', 'Alumno de prueba'),
  27. (4, 2, 'Matias Ignacio', 'Contreras Carvajal', '18985364-5', 'Huemul 13664', 'La Florida', 46955654, 87854354, '2001-01-20', 'Claudia Carvajal', '[email protected]', '[email protected]', 'Alumno de prueba'),
  28. (5, 2, 'Catalina MIlen', 'Contreras Carvajal', '16845756-3', 'Huemul 13664', 'La Florida', 45654545, 46587212, '2003-02-20', 'Claudia Carvajal', '[email protected]', '[email protected]', 'Alumno de prueba');
  29.  
  30.  
  31. CREATE TABLE `t_notas` (
  32.   `id_alumno` int(10) NOT NULL,
  33.   `id_ramo` int(10) NOT NULL,
  34.   `id_curso` int(11) NOT NULL,
  35.   `id_parcial` int(11) NOT NULL,
  36.   `semestre` int(10) NOT NULL,
  37.   `nota` float(2,1) NOT NULL,
  38.   `info` varchar(150) COLLATE utf8_spanish_ci NOT NULL,
  39.   PRIMARY KEY (`id_nota`)
  40. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
  41.  
  42. --
  43. -- Volcado de datos para la tabla `t_notas`
  44. --
  45.  
  46. INSERT INTO `t_notas` (`id_nota`, `id_alumno`, `id_ramo`, `id_curso`, `id_parcial`, `semestre`, `nota`, `info`) VALUES
  47. (0000000001, 1, 1, 1, 1, 1, 5.8, 'Control'),
  48. (0000000003, 3, 1, 1, 1, 1, 7.0, 'Control'),
  49. (0000000004, 1, 1, 1, 2, 1, 3.8, 'Unidad 1'),
  50. (0000000005, 3, 1, 1, 2, 1, 7.0, 'Unidad 1'),
  51. (0000000008, 1, 1, 1, 3, 1, 3.0, 'Unidad 2'),
  52. (0000000009, 3, 1, 1, 3, 1, 6.0, 'Unidad 2'),
  53. (0000000010, 4, 1, 2, 1, 1, 7.0, 'Control 1');
Código MySQL:
Ver original
  1. SELECT CONCAT(i_alumnos.apellido," ",i_alumnos.nombre)as ALUMNO,
  2. SUM(IF(id_parcial=1,nota,NULL)) AS nota1,
  3. SUM(IF(id_parcial=2,nota,NULL)) AS nota2,
  4. SUM(IF(id_parcial=3,nota,NULL)) AS nota3,
  5.  
  6. /*promedio */
  7. ROUND((sum(nota*(1-abs(sign(id_parcial-1)))) +
  8. sum(nota*(1-abs(sign(id_parcial-2)))) +
  9. sum(nota*(1-abs(sign(id_parcial-3)))))/COUNT(nota),1) as PROMEDIO
  10.  
  11. FROM i_alumnos, t_notas
  12. WHERE i_alumnos.id_alumno = t_notas.id_alumno
  13. AND t_notas.id_curso="1"
  14. AND t_notas.id_ramo="1"
  15. AND t_notas.semestre="1"
  16. GROUP by i_alumnos.apellido
  17. ORDER by i_alumnos.apellido asc

Resumiendo en 1 tabla tengo alumnos y la 2 tabla de calificaciones.

La consulta es para obtener notas parciales por curso y de un ramo en espcifico y me devuelve Nombre | nota 1 |nota 2 | nota 3 | Promedio

El problema de la query es que si un alumno no tiene nota, la consulta lo pasa por alto ya que no tiene registros, porque obviamente no está en la tabla de notas

La idea es que pueda llamar a todos los alumnos de un curso (id_curso=1) tenga o no calificaciones.

Espero que se entienda. Saludos
__________________
Aquí voy a escribir mi firma

Última edición por gnzsoloyo; 22/02/2013 a las 17:57 Razón: Extirpado de referencias externas.