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

Ayuda Consultas

Estas en el tema de Ayuda Consultas en el foro de Mysql en Foros del Web. Que tal pues como verán soy nuevo en el foro pero quisiera saber si me pueden ayudar a realizar una consulta algo compleja lo quise ...
  #1 (permalink)  
Antiguo 28/06/2009, 16:37
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 1
Sonrisa Ayuda Consultas

Que tal pues como verán soy nuevo en el foro pero quisiera saber si me pueden ayudar a realizar una consulta algo compleja lo quise hacer por medio de inner join y count pero tengo problemas con todo esto.

Ahora explico lo que quiero realizar:

Tengo 3 tablas alumnos, grupos, docente con las cuales quiero obtener los campos de algunas de ellas:

En alumnos solo quiero obtener el numero de hombres y mujeres que hay en cada grupo, pero a su vez también quiero obtener los datos completos de la tabla grupos por medio de su id comparándolo con su id, y el id y nombre del docente de la tabla docentes comparando el id con la tabla grupos, la manera con la cual trato de realizarlo es la siguiente:


Código:
select count(SEXO) from alumnos
inner join grupos on alumnos.id_grupo = grupos.id_grupo
inner join docentes on grupos.id_docente = docentes.id_docente
where alumnos.id_grupo = 9
group by sexo;
Pero el resultado no es el deseado solo consigo traer el campo sexo y quiero todos los demás campos aquí les pongo un diseño de como quiero que quede:

Código:
Reporte:

ID grupo:   1                                         ID docente:   6
                                                    Grado: 2   Grupo: B

Docente a cargo del grupo:  Panfilo        Escalante          García
                             Nombre       Ape. Paterno     Ape. Materno

Información del grupo: M            41           20           21
                      Turno     Num. Alumnos    Hombres     Mujeres

Bueno como verán en el ejemplo no se si sea complicado realizar esto pero me ayudarían mucho resolviendo esta duda lo que pasa es que quiero realizarlo para hacer un reporte en iReport.

De antemano gracias por prestarle atención a esta pequeña duda.
  #2 (permalink)  
Antiguo 29/06/2009, 12:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda Consultas

Si necesitas todos los campos de las 3 tablas prueba esto:

Código sql:
Ver original
  1. SELECT a.*,g.*,d.*, COUNT(SEXO) FROM alumnos a
  2. INNER JOIN grupos g ON a.id_grupo = g.id_grupo
  3. INNER JOIN docentes d ON g.id_docente = d.id_docente
  4. WHERE a.id_grupo = 9
  5. GROUP BY a.sexo;

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 30/06/2009, 18:21
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 1
Sonrisa Respuesta: Ayuda Consultas

Bueno el ejemplo que pones es muy ilustrativo pero aun no me queda como yo quiero y la verdad no se si sea mucho pedir aquí pongo las tablas que utilizo para esto:

Tabla Alumnos:

Código:
CREATE TABLE `alumnos` (
  `id_alumno` int(5) unsigned NOT NULL default '0',
  `nombre` varchar(25) NOT NULL,
  `ape_paterno` varchar(25) NOT NULL,
  `ape_materno` varchar(25) NOT NULL,
  `fecha_nac` datetime NOT NULL,
  `sexo` varchar(2) NOT NULL,
  `calle_num` varchar(50) NOT NULL,
  `colonia` varchar(40) NOT NULL,
  `cp` int(5) unsigned default NULL,
  `entidad` varchar(3) default NULL,
  `nom_tutor` varchar(55) NOT NULL,
  `telefono` varchar(15) default NULL,
  `rfc` varchar(14) default NULL,
  `curp` varchar(19) default NULL,
  `id_grupo` int(5) unsigned NOT NULL,
  PRIMARY KEY  (`id_alumno`),
  KEY `id_alumno` (`id_alumno`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Que a su vez esta relacionada con la Tabla Grupos:
Código:
CREATE TABLE `grupos` (
  `id_grupo` int(5) NOT NULL default '0',
  `grado` int(2) default NULL,
  `grupo` varchar(2) default NULL,
  `turno` varchar(2) default NULL,
  `num_alum` int(3) default NULL,
  `id_docente` int(5) default NULL,
  PRIMARY KEY  (`id_grupo`),
  KEY `id_grupo` (`id_grupo`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Y la Tabla Docentes que esta relacionada con la tabla Grupos:
Código:
CREATE TABLE `docentes` (
  `id_docente` int(5) unsigned NOT NULL default '0',
  `nombre` varchar(25) NOT NULL,
  `ape_paterno` varchar(25) NOT NULL,
  `ape_materno` varchar(25) NOT NULL,
  `calle_num` varchar(50) default NULL,
  `colonia` varchar(40) default NULL,
  `mun_del` varchar(45) default NULL,
  `cp` int(5) unsigned default NULL,
  `telefono` varchar(15) default NULL,
  `rfc` varchar(14) default NULL,
  `curp` varchar(21) default NULL,
  `clave_issemym` int(10) default NULL,
  `edo_civil` varchar(11) default NULL,
  `escolaridad` varchar(30) default NULL,
  `tipo_esc` varchar(30) default NULL,
  `categoria_doc` varchar(30) default NULL,
  `fecha_ing_serv` datetime NOT NULL,
  `fecha_ing_esc` datetime NOT NULL,
  PRIMARY KEY  (`id_docente`),
  KEY `id_docente` (`id_docente`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Y lo que desea es obtener solo los datos que les muestro en el reporte anterior, la verdad no se si se pueda hacer tal cosa para implementarlo en iReport, lo único que me hace falta es obtener cuantos Hombres y Mujeres hay en cada grupo pero lo trate de realizar como les mencionaba anteriormente.

Bueno lo hacia de la siguiente forma pero no obtenía el total de hombres y mujeres de cada grupo.


Código:
Select grupos.id_grupo, grupos.grado, grupos.grupo, grupos.turno,
grupos.num_alum, grupos.id_docente, docentes.id_docente,
docentes.nombre,docentes.ape_paterno, docentes.ape_materno from grupos 
inner join docentes on grupos.id_docente = docentes.id_docente 
where id_grupo = $P{P_id_grupo};
De ahí que trate con count, y como lo quiero obtener por medio del parámetro P_id_grupo que busca el id_grupo de la Tabla Grupos, no se si exista una forma de realizarlo.

Espero que me puedan ayudar y más que todo haya explicado lo que quiero realizar de antemano gracias.
  #4 (permalink)  
Antiguo 04/07/2009, 17:25
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 1
Sonrisa Respuesta: Ayuda Consultas

Bueno antes que nada aquí les pongo una imagen de como debe quedar el reporte:

Código:
h ttp://img154.imagevenue.com/img.php?loc=loc8&image=27667_Duda_122_8lo.JPG
Cita:
Iniciado por huesos52
Si necesitas todos los campos de las 3 tablas prueba esto:

SELECT a.*,g.*,d.*, count(SEXO) FROM alumnos a
INNER JOIN grupos g ON a.id_grupo = g.id_grupo
INNER JOIN docentes d ON g.id_docente = d.id_docente
WHERE a.id_grupo = 9
GROUP BY a.sexo;
Estuve revisando tu ejemplo y resulta que ya lo implemente de esta forma pero ahora el problema que tengo es que me muestra dos registro por la consulta que realice ya que como lo agrupo por sexo me muestra dos registros y quiero que me muestre en uno solo cuantos hombre y mujeres son aquí les pongo la imagen de como me queda con la consulta que realice:
Código:
h ttp://img101.imagevenue.com/img.php?image=49559_consulta_122_4lo.JPG
  #5 (permalink)  
Antiguo 05/07/2009, 07:49
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Ayuda Consultas

El group by es el que te separa hombres de mujeres.
Para hacerlo en un solo registro, no es posible poner en la consulta los otros campos, ya que mysql no sabría a que registros darle prioridad.

Quieres hacer un conteo de sexo, pero de hombres? o mujeres? Si son los dos, por que contar por campo sexo? Si se hace un conteo por grupo, no obtendrías el resultado que esperas?

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 05/07/2009, 11:35
 
Fecha de Ingreso: junio-2009
Mensajes: 45
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Ayuda Consultas

ok gracias por la ayuda espero poder resolverlo con los tips que me has dado bye
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 10:18.