elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  agrupar resultados de tres tablas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: agrupar resultados de tres tablas  (Leído 3,194 veces)
vhugo_rf

Desconectado Desconectado

Mensajes: 3


Ver Perfil
agrupar resultados de tres tablas
« en: 5 Febrero 2014, 16:44 pm »

Hola, tengo una base de datos con tres tablas, y necesito el promedio de cada bloque, tengo la siguiente consulta, pero me pone todo como lista y lo necesito como tabla uno frente del otro, adjunto imagenes.

SELECT bl.bloque as 'bloque', ROUND(avg(rp.respuesta) , 2 ) as 'promedio', rp.relacion as 'relacion'
FROM respuestas rp
inner join bloque bl
on rp.id_bloque = bl.id_bloque
inner join pregunta pr
on rp.id_pregunta = pr.id_pregunta
where rp.id_encuesta = 1
and rp.evaluado = 2
and rp.relacion in (select id_relacion from relacion)
and pr.activa = 1
and pr.eliminada = 0
group by rp.relacion, rp.id_bloque;

La consulta anterior arroja lo siguiente


y necesito los datos así




me pueden ayudar por favor, muchas gracias


En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: agrupar resultados de tres tablas
« Respuesta #1 en: 7 Febrero 2014, 20:35 pm »

Utiliza subconsultas.

Coloca el diseño exacto de tus tablas y te ayudo, junto con algunos datos de ejemplo.


En línea

abc
Nakatsukasa Itero

Desconectado Desconectado

Mensajes: 22


Shark


Ver Perfil
Re: agrupar resultados de tres tablas
« Respuesta #2 en: 8 Febrero 2014, 05:43 am »

en primera te sale así porque solo pides que te salgan 3 columnas
Código:
bl.bloque as 'bloque', ROUND(avg(rp.respuesta) , 2 ) as 'promedio', rp.relacion as 'relacion'
para que te salgan las otras 8 columnas debes de cambiar el código a algo parecido a esto
Código:
bl.bloque as 'bloque', ROUND(avg(rp.respuesta) , 2 ) as 'promedio', rp.relacion as 'relacion' ROUND(avg(rp.respuesta) , 2 ) as 'promedio', rp.relacion as 'relacion'
recuerda que te digo que parecido más no igual este es solo un ejemplo.

la idea que me viene a la cabeza es que primero hagas una consulta para obtener solo los row (la parte de bloque) luego con una anidación en join (que ciertamente no lo uso, yo soy más abcc: altas bajas cambios consultas; pero más cimples sin taanta complicación sql) hacer la consulta que se tome el promedio y relación cuando bloque sea `bloque`, pero el problema sería en  que las columnas se toman con solo x regustros, luego las siguientes columnas a partir de los registros que no fueron tomados en cuanta hasta los siguientes, es pues como hacer una segmentación de los registros que se tienen, en cuy caso si siempre son 15 columnas puedes hacer se que cuenten de x a y, luego de (y+1) a (y+1)+incremento y así pero es en la parte de "AS prom..."
En línea

Kanashimi no Itero
vhugo_rf

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: agrupar resultados de tres tablas
« Respuesta #3 en: 14 Febrero 2014, 17:20 pm »

Utiliza subconsultas.

Coloca el diseño exacto de tus tablas y te ayudo, junto con algunos datos de ejemplo.


Hola, pongo la estructura de mis tablas

Código:

--
-- Estructura de tabla para la tabla `respuestas`
--

CREATE TABLE IF NOT EXISTS `respuestas` (
  `id_respuesta` int(11) NOT NULL AUTO_INCREMENT,
  `id_encuesta` int(11) NOT NULL,
  `id_bloque` int(11) NOT NULL,
  `id_pregunta` int(11) NOT NULL,
  `evaluado` int(11) NOT NULL,
  `relacion` int(11) NOT NULL,
  PRIMARY KEY (`id_respuesta`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


CREATE TABLE IF NOT EXISTS `bloque` (
  `id_bloque` int(11) NOT NULL AUTO_INCREMENT,
  `bloque` varchar(50) NOT NULL,
  PRIMARY KEY (`id_bloque`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS `pregunta` (
  `id_pregunta` int(11) NOT NULL AUTO_INCREMENT,
  `activa` tinyint(1) NOT NULL DEFAULT '0',
  `eliminada` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id_pregunta`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;




sigo sin poder, ya intente con subconsultas y nada, espero me puedas ayudar.  Muchas gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines