Pregunta:
Fecha: 25-09-2015 09:35:51
(En Español)
Se me plantea la siguiente situacion:
.- Tengo 5 preguntas de una encuesta
.- La calificacion de cada pregunta es del 0 al 5
No Aplica = 0
Malo = 1
Regular = 2
Bueno = 3
Muy Bueno = 4
Excelente = 5
.- Debo obtener la calificacion sin tener en cuenta el No aplica = 0
.- Para lo cual hice la siguiente consulta y funciona muy bien:
Ahora bien aqui viene la pregunta:
Solo deseo obtener los promedio o calificaciones <= 2.50
Aquello que puedan aportar alguna ayuda, desde ya muy agradecido
Un saludo a todos
Daniel Votos: 1 - Respuestas: 3 - Vistas: 9 Compartir en: Google Facebook Twitter LinkedIn Link
Consulta MySQL - Encuesta al cliente[Resuelta]
Buenas tardes:Se me plantea la siguiente situacion:
.- Tengo 5 preguntas de una encuesta
.- La calificacion de cada pregunta es del 0 al 5
No Aplica = 0
Malo = 1
Regular = 2
Bueno = 3
Muy Bueno = 4
Excelente = 5
.- Debo obtener la calificacion sin tener en cuenta el No aplica = 0
.- Para lo cual hice la siguiente consulta y funciona muy bien:
SELECT *,
ROUND(( respuesta_2 + respuesta_3 + respuesta_4 + respuesta_5 + respuesta_6 ) /
(CASE WHEN respuesta_2 > 0 THEN 1 ELSE 0 END +
CASE WHEN respuesta_3 > 0 THEN 1 ELSE 0 END +
CASE WHEN respuesta_4 > 0 THEN 1 ELSE 0 END +
CASE WHEN respuesta_5 > 0 THEN 1 ELSE 0 END +
CASE WHEN respuesta_6 > 0 THEN 1 ELSE 0 END ), 2 ) AS promedio
FROM encuesta_al_cliente
WHERE ano = 2015
AND resuelto = 'No'
AND respuesta_2 + respuesta_3 + respuesta_4 + respuesta_5 + respuesta_6 > 0
OR MATCH (observaciones) AGAINST ('%rapi* mal* tarde pesim* debe* suc* fuma* radio cartel hora* celu*%' IN BOOLEAN MODE )
ORDER BY fechaAhora bien aqui viene la pregunta:
Solo deseo obtener los promedio o calificaciones <= 2.50
Aquello que puedan aportar alguna ayuda, desde ya muy agradecido
Un saludo a todos
Daniel Votos: 1 - Respuestas: 3 - Vistas: 9 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 25-09-2015 11:34:50 Bueno, he encontrado la respuesta y solucion al tema.
Para el que le interesa lo dejo planteado
La cantidad de puntaje que se puede obtener por respuestas con puntaje Regular = 2, siendo estas 5 sera igual a 10, por lo tanto la consulta quedara asi:
SELECT *, ROUND(( respuesta_2 + respuesta_3 + respuesta_4 + respuesta_5 + respuesta_6 ) / (CASE WHEN respuesta_2 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_3 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_4 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_5 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_6 > 0 THEN 1 ELSE 0 END ), 2 ) AS promedio FROM encuesta_al_cliente WHERE ano = 2015 AND resuelto = 'No' AND respuesta_2 + respuesta_3 + respuesta_4 + respuesta_5 + respuesta_6 <= 10 OR MATCH (observaciones) AGAINST ('%rapi* mal* tarde pesim* debe* suc* fuma* radio cartel hora* celu*%' IN BOOLEAN MODE ) ORDER BY fecha
Esto es todo, gracias como siempre
Daniel
PD.: Doy por resuelta la pregunta Votos: 2 - Link respuesta -
Fecha: 25-09-2015 17:37:18 muy bueno, muchas gracias por compartir, seguro que el caso servirá como ejemplo.
voy hacer alguna practica con ello
estaria bueno una explicación sobre que hace esa consulta (query) paso a paso y de esa manera queda como un tutorial :)
y la estructura de la tabla para mayor comprensión
Pero bueno seguro que hay que contar con mucho tiempo para poderlo hacer
saludos Votos: 0 - Link respuesta -
Fecha: 26-09-2015 08:54:14 Walter:
Intentare explicar mi consulta, espero sepan compreder mis modos poco ortodoxos, ya que como siempre he comentado, soy contador y no ingeniero.
Llego a elavorar esta consulta, dado a que en la empresa el Dpto de Calidad, me plantea la necesidad de enviar una encuesta a los Clientes por estar Normados por la ISO 9001.
OBJETIVO:
1.- Realizar una encuesta
2.- Obtener los resultados
3.- Armar una estadistica con ellos
4.- Individualizar los resultados negativos y darle una atencion en cada caso
ALCANCE:
1.- Cree una tabla en la BD (Tabla encuesta_al_cliente)
CREATE TABLE encuesta_al_cliente ( id_encuesta(11) unsigned default null auto_increment, cliente varchar(255) not null, sector varchar(150) not null, ano int(4) not null, respuesta_1 int(1) not null, respuesta_2 int(1) not null, respuesta_3 int(1) not null, respuesta_4 int(1) not null, respuesta_5 int(1) not null, respuesta_6 int(1) not null, observaciones varchar(255) not null, fecha date not null, rta varchar(2) not null default 'No', fecha_accion date not null, accion longtext not null, rta varchar(2) not null default 'No', PRIMARY KEY (id_encuesta) );
2.- Crear un formulario que se acceda mediante un link que contenga un mail que se le envia al cliente, asi de este modo responde a la encuesta.
3.- Una vez ingresada la encuesta, acceder a los resultados
4.- Exportar a Excel
LENGUAJES UTILIZADOS:
HTML, CSS, PHP, MySQL, Libreria PHPExcel
Para ello hice este pequeño desarrollo:
Video del Desarrollo (Para que se se vea bien, llevarlo a una resolucion de 720 y ampliar 100% en el monitor)
AHORA PASO A EXPLICAR LA CONSULTA MySQL
Hay 2 tipos de consultas MySQL que he utilizado con una pequeña variacion en ellas
1er Caso: Debo obtener la informacion de todos aquellos que participaron de la encuesta sin importar la calificacion que hicieron y ordenarlos Alfabeticamente por el nombre del Cliente
2do Caso: La consulta la cual fue objeto de mi pregunta, en donde debo obtener todos aquellos resultados que dan un promedio de calificacion inferior a 3 puntos (Recuerdo Puntaje: Malo = 1 - Reg = 2 - Bueno = 3 - MB = 4 - Excelente = 5 - NO APLICA = 0)
Para obtener dicho resultado hice lo siguiente
SELECT:
Seleccionar todas las respuestas de un registro, sumarlas y despues dividirlas por las suma de las respuestas cuyo resultado sea > 0, todo ello lo dedondeo con 2 decimales (ROUND, 2) y el resultado lo acumulo en un campo promedio (AS promedio)
Debo hacer esto ya que cada pregunta puede tener como Puntaje = 0 (NO APLICA) y si considero esta respuesta, desvirtua el resultado de la misma.
FROM
De la tabla encuesta_al_cliente
WHERE
Donde el año sea 2015
Y
El caso "No" fue resulto
Y
La sumatoria de las respuestas es <= 10 (10 es el Maximo puntaje al alcanzar si la respuestas son negativas)
"O"
ACA LA PARTE MAS LINDA:
Verificar si en observaciones, aparecen palabras que comiencen con AGAINST()
Debido a que puede tener una buena calificacion, pero existe un comentario que merece ser atendido para llevar adelante una mejora ante el cliente
Para finalizar
ORDER BY
Ordenar los resultados por el campo fecha de manera descendente
SELECT *, ROUND(( respuesta_2 + respuesta_3 + respuesta_4 + respuesta_5 + respuesta_6 ) / (CASE WHEN respuesta_2 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_3 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_4 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_5 > 0 THEN 1 ELSE 0 END + CASE WHEN respuesta_6 > 0 THEN 1 ELSE 0 END ), 2 ) AS promedio FROM encuesta_al_cliente WHERE ano = 2015 AND resuelto = 'No' AND respuesta_2 + respuesta_3 + respuesta_4 + respuesta_5 + respuesta_6 <= 10 OR MATCH (observaciones) AGAINST ('%rapi* mal* tarde pesim* debe* suc* fuma* radio cartel hora* celu*%' IN BOOLEAN MODE ) ORDER BY fecha DESC
Espero haber cumplido con las expectativas de la pregunta
Un cordial saludo
Daniel Votos: 1 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
