Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Es posible colocar 0 en una consulta si falta un valor?

Estas en el tema de Es posible colocar 0 en una consulta si falta un valor? en el foro de Mysql en Foros del Web. Estimados amigos, me encuentro por acá nuevamente reabriendo este post ya que en el anterior creo que no me explique del todo bien. Estoy realizando ...
  #1 (permalink)  
Antiguo 15/04/2013, 16:42
 
Fecha de Ingreso: marzo-2007
Mensajes: 59
Antigüedad: 17 años, 1 mes
Puntos: 1
Es posible colocar 0 en una consulta si falta un valor?

Estimados amigos, me encuentro por acá nuevamente reabriendo este post ya que en el anterior creo que no me explique del todo bien. Estoy realizando un sistema de encuestas, en donde cada pregunta tiene 4 posibles respuesta, las preguntas se dividen por grupo y subgrupos. Al totalizar la encuesta debo contabilizar el numero de respuesta para cada pregunta. Ejemplo: la pregunta#1 del grupo efectividad, subgrupo enfoque, tuvo en la opción 1 (8 respuestas), opción 2 (4), opción 3(2), opción 4(0). El problema surge cuando hago la consulta puedo conocer cuantas respuestas tengo de cada una pero no veo como conocer la opción a la cual nadie respondió.



Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `pregunta` (
  2.       `idpregunta` INT(11) NOT NULL AUTO_INCREMENT,
  3.       `idencuesta` INT(11) NOT NULL,
  4.       `pregunta` text NOT NULL,
  5.       `p1` text NOT NULL,
  6.       `p2` text NOT NULL,
  7.       `p3` text NOT NULL,
  8.       `p4` text NOT NULL,
  9.       `grupo` tinyint(4) NOT NULL,
  10.       `subgrupo` tinyint(4) NOT NULL,
  11.       `activo` tinyint(4) NOT NULL,
  12.       PRIMARY KEY (`idpregunta`),
  13.       KEY `idpregunta` (`idpregunta`),
  14.       KEY `idencuesta` (`idencuesta`)  );
  15.      
  16.     CREATE TABLE IF NOT EXISTS `respuesta` (
  17.       `idrespuesta` INT(11) NOT NULL AUTO_INCREMENT,
  18.       `idcliente` INT(11) NOT NULL,
  19.       `idencuesta` INT(11) NOT NULL,
  20.       `idcolaborador` INT(11) NOT NULL,
  21.       `idpregunta` INT(11) NOT NULL,
  22.       `respuesta` INT(11) NOT NULL,
  23.       PRIMARY KEY (`idrespuesta`)
  24.     ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1472 ;
  25.      
  26.     CREATE TABLE IF NOT EXISTS `grupo` (
  27.       `idgrupo` INT(6) NOT NULL AUTO_INCREMENT,
  28.       `grupo` VARCHAR(100) NOT NULL,
  29.       `activo` tinytext NOT NULL,
  30.       PRIMARY KEY (`idgrupo`),
  31.       KEY `idgrupo` (`idgrupo`) ) ;
  32.      
  33.          
  34.     INSERT INTO `grupo` (`idgrupo`, `grupo`, `activo`) VALUES
  35.     (1, 'Efectividad', '1'),
  36.     (2, 'Confianza', '1'),
  37.     (3, 'Modelaje', '1'),
  38.     (4, 'Comunicación', '1'),
  39.     (5, 'Adecuación del Estilo', '1'),
  40.     (6, 'Autoliderazgo', '1');
  41.      
  42.      
  43.     CREATE TABLE IF NOT EXISTS `subgrupo` (
  44.       `idsub` INT(11) NOT NULL AUTO_INCREMENT,
  45.       `idgrupo` tinyint(4) NOT NULL,
  46.       `sub` VARCHAR(100) NOT NULL,
  47.       `activo` tinyint(4) NOT NULL,
  48.       PRIMARY KEY (`idsub`),
  49.       UNIQUE KEY `idsub` (`idsub`)) ;
  50.      
  51.     --
  52.     -- Volcado de datos para la tabla `subgrupo`
  53.     --
  54.      
  55.     INSERT INTO `subgrupo` (`idsub`, `idgrupo`, `sub`, `activo`) VALUES
  56.     (1, 1, 'Enfoque', 1),
  57.     (2, 1, 'Responsabilidad', 1),
  58.     (3, 1, 'Involucramiento', 1),
  59.     (4, 1, 'Consecuencia', 1),
  60.     (5, 2, 'Capaz', 1),
  61.     (6, 2, 'Creible', 1),
  62.     (7, 2, 'Conectado', 1),
  63.     (8, 2, 'Consistente', 1),
  64.     (9, 2, 'Satisfacción', 1),
  65.     (10, 3, 'Ninguno', 1),
  66.     (11, 4, 'Ninguno', 1),
  67.     (12, 5, 'Persona a Persona', 1),
  68.     (13, 5, 'Equipo', 1),
  69.     (14, 6, 'Autonomía', 1),
  70.     (15, 6, 'Fuentes de Influencia', 1);

Basicamente quisiera obtener esto
Código SQL:
Ver original
  1. +-----------+-----------+-----------------------+-----------------------+----------------+
  2. | Pregunta  | respuesta | grup                  | sub                   | totalRespuesta |
  3. +-----------+-----------+-----------------------+-----------------------+----------------+
  4. |         1 |         1 | Efectividad           | Enfoque               |              2 |
  5. |         1 |         2 | Efectividad           | Enfoque               |              1 |
  6. |         1 |         3 | Efectividad           | Enfoque               |              1 |
  7. |         1 |         4 | Efectividad           | Enfoque               |              0 |
  8. |         2 |         1 | Efectividad           | Enfoque               |              1 |
  9. |         2 |         2 | Efectividad           | Enfoque               |              2 |
  10. |         2 |         3 | Efectividad           | Enfoque               |              1 |
  11. |         2 |         4 | Efectividad           | Enfoque               |              0 |
  12. |         3 |         1 | Efectividad           | Responsabilidad       |              2 |
  13. |         3 |         2 | Efectividad           | Responsabilidad       |              1 |
  14. |         3 |         3 | Efectividad           | Responsabilidad       |              0 |
  15. |         3 |         4 | Efectividad           | Responsabilidad       |              1 |
  16. |         4 |         1 | Efectividad           | Responsabilidad       |              1 |
  17. |         4 |         2 | Efectividad           | Responsabilidad       |              1 |
  18. |         4 |         3 | Efectividad           | Responsabilidad       |              0 |
  19. |         4 |         4 | Efectividad           | Responsabilidad       |              2 |

Mi mayor acercamiento ha sido esto
Código SQL:
Ver original
  1. SELECT R.idpregunta, R.respuesta, COUNT( R.respuesta ) totalRespuesta, P.nsec, P.grupo, P.subgrupo, G.grupo AS grup, S.sub
  2. FROM colaborador C
  3. LEFT JOIN respuesta R ON C.idcol = R.idcolaborador
  4. LEFT JOIN pregunta P ON P.idpregunta = R.idpregunta
  5. LEFT JOIN grupo G ON G.idgrupo = P.grupo
  6. LEFT JOIN subgrupo S ON S.idsub = P.subgrupo
  7. WHERE R.idencuesta = '1'
  8. AND `P`.`grupo` >0
obteniendo solamente esto
Código SQL:
Ver original
  1. idpregunta  respuesta   totalRespuesta  nsec    grupo   subgrupo    grup            sub
  2. 1                1       4              1       1       1           Efectividad     Enfoque
  3. 2                2       2              2       1       1           Efectividad     Enfoque
  4. 2                3       1              2       1       1           Efectividad     Enfoque
  5. 2                1       1              2       1       1           Efectividad     Enfoque
  6. 3                2       2              3       1       1           Efectividad     Enfoque
  7. 3                3       1              3       1       1           Efectividad     Enfoque
  8. 3                1       1              3       1       1           Efectividad     Enfoque
  9. 4                2       2              4       1       1           Efectividad     Enfoque
  10. 4                1       2              4       1       1           Efectividad     Enfoque
  11. 5                1       2              5       1       2           Efectividad     Responsabilidad
  12. 5                2       2              5       1       2           Efectividad     Responsabilidad
  13. 6                1       1              6       1       2           Efectividad     Responsabilidad
  14. 6                2       2              6       1       2           Efectividad     Responsabilidad
  15. 6                4       1              6       1       2           Efectividad     Responsabilidad
  16. 7                2       1              7       1       2           Efectividad     Responsabilidad
  17. 7                1       3              7       1       2           Efectividad     Responsabilidad
  18. 8                2       2              8       1       2           Efectividad     Responsabilidad
  19. 8                1       2              8       1       2           Efectividad     Responsabilidad
  20. 9                1       1              9       1       3           Efectividad     Involucramiento
  21. 9                2       3              9       1       3           Efectividad     Involucramiento
  22. 10               1       1              10      1       3           Efectividad     Involucramiento
  23. 10               2       3              10      1       3           Efectividad     Involucramiento
  24. 22               2       2              22      1       3           Efectividad     Involucramiento
  25. 22               1       2              22      1       3           Efectividad     Involucramiento
  26. 23               2       2              23      1       3           Efectividad     Involucramiento
  27. 23               4       1              23      1       3           Efectividad     Involucramiento
  28. 23               1       1              23      1       3           Efectividad     Involucramiento
  29. 11               1       1              11      1       4           Efectividad     Consecuencia

Mi Universo de encuestados en esta prueba son 4 personas, en el caso de la pregunta 1 las cuatro personas eligieron la primera opción por lo cual no puedo contabilizar 2, 3 y 4. Necesito obtenerlo para sacar porcentajes, Gracias por su ayuda
  #2 (permalink)  
Antiguo 15/04/2013, 17:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Es posible colocar 0 en una consulta si falta un valor?

Por lo pronto, recuerda que en el LEFT JOIN, el orden de los factores altera el producto.
Si lo que quieres es saber el resultado de las respuestas a todas las preguntas, incluyendo las opciones que no fueron seleccionadas, no puedes empezar a contar desde los que las respondieron, porque los que las respondieron no las seleccionaron, por tanto nunca encontrarás relaciones entre los grupos, subgrupos y las opciones no elegidas.
Comienza con la relación entre preguntas y respuestas, que forzosamente debe ser con un INNER JOIN, y no un LEFT JOIN.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: falta, insert, join, posible, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:26.