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

Que estoy haciendo mal (Count)

Estas en el tema de Que estoy haciendo mal (Count) en el foro de Mysql en Foros del Web. Necesito contar el numero de alumnos y me lo duplica esta es la consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT    alumnos.IdAlumno ,   ...
  #1 (permalink)  
Antiguo 30/09/2013, 01:18
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Que estoy haciendo mal (Count)

Necesito contar el numero de alumnos y me lo duplica esta es la consulta:
Código MySQL:
Ver original
  1.    alumnos.IdAlumno,
  2.    alumnos.`Nombre Alumno`,
  3.    alumnos.`Primer Apellido`,
  4.    alumnos.`Segundo Apellido`,
  5.    alumnos.Confirmado,
  6.    alumnos.IdGrupo,
  7.    GROUP_CONCAT(DISTINCT alumnos.`IdAlumno`, ' ',alumnos.`Nombre Alumno`,' ',alumnos.`Primer Apellido`,' ',alumnos.`Segundo Apellido`, ' ', alumnos.IdGrupo ORDER BY alumnos.`IdAlumno`) NombreAlumno,
  8.    COUNT(alumnos.IdGrupo) as sumaalumnos,
  9.    grupos.IdGrupo,
  10.    grupos.`Nombre Grupo`,
  11.    gruposhorarios.Nombre,
  12.    gruposhorarios.Dia,
  13.    gruposhorarios.`Nombre Grupo`,
  14.    gruposhorarios.HoraInicio,
  15.    gruposhorarios.HoraFin,
  16.    gruposhorarios.Ubicacion,
  17.    gruposhorarios.Memo,
  18.    GROUP_CONCAT(DISTINCT gruposhorarios.Dia,' ',gruposhorarios.HoraInicio,' ',gruposhorarios.HoraFin) Horarios
  19.    alumnos INNER JOIN grupos ON alumnos.IdGrupo= grupos.IdGrupo
  20.    INNER JOIN gruposhorarios ON grupos.`Nombre Grupo` = gruposhorarios.`Nombre Grupo`
  21.  
  22.    (alumnos.Confirmado = '1') OR (alumnos.Confirmado = '4')
  23.     gruposhorarios.`Nombre Grupo`
Un 3 tablas. Alumnos, grupos y grupos horarios.
Agrupo por nombre de grupo y me duplica el numero de alumnos, no veo donde esta el fallo.
Gracias

Última edición por gnzsoloyo; 30/09/2013 a las 03:17
  #2 (permalink)  
Antiguo 30/09/2013, 04:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Que estoy haciendo mal (Count)

Primero:

Para concatenar el nombre de un alumno

http://dev.mysql.com/doc/refman/5.0/...tion_concat-ws

Código MySQL:
Ver original
  1.                      alumnos.`Nombre Alumno`,
  2.                      alumnos.`Primer Apellido`,
  3.                      alumnos.`Segundo Apellido`) NombreAlumno

Segundo para contar los alumnos de un grupo

Código MySQL:
Ver original
  1.    grupos.IdGrupo,
  2.    grupos.`Nombre Grupo`,
  3.    COUNT(alumnos.IdAlumno) Nalumnos
  4.    alumnos INNER JOIN grupos ON alumnos.IdGrupo= grupos.IdGrupo
  5.    (alumnos.Confirmado = '1') OR (alumnos.Confirmado = '4')
  6.        grupos.IdGrupo,
  7.       grupos.`Nombre Grupo`;

Para contar alumnos por grupos y horarios

Código MySQL:
Ver original
  1. grupos.IdGrupo,
  2. grupos.`Nombre Grupo`,
  3. gruposhorarios.Nombre,
  4. gruposhorarios.Dia,
  5. gruposhorarios.HoraInicio,
  6. gruposhorarios.HoraFin,
  7. gruposhorarios.Ubicacion,
  8. gruposhorarios.Memo,
  9. CONCAT_WS(' ',
  10.                     gruposhorarios.Dia,
  11.                     gruposhorarios.HoraInicio,
  12.                     gruposhorarios.HoraFin) Horarios,
  13. COUNT(alumnos.IdAlumno) Nalumnos
  14. alumnos INNER JOIN grupos ON alumnos.IdGrupo= grupos.IdGrupo
  15. INNER JOIN gruposhorarios ON grupos.`Nombre Grupo` = gruposhorarios.`Nombre Grupo`
  16. (alumnos.Confirmado = '1') OR (alumnos.Confirmado = '4')
  17. grupos.IdGrupo,
  18. grupos.`Nombre Grupo`,
  19. gruposhorarios.Nombre,
  20. gruposhorarios.Dia,
  21. gruposhorarios.HoraInicio,
  22. gruposhorarios.HoraFin,
  23. gruposhorarios.Ubicacion,
  24. gruposhorarios.Memo,
  25. CONCAT_WS(' ',
  26.                     gruposhorarios.Dia,
  27.                     gruposhorarios.HoraInicio,
  28.                     gruposhorarios.HoraFin);

Si no te sirve ninguna, muestra el resultado que querrias obtener...

En la tabla "gruposhorarios" deberias tener el IdGrupo siempre es mejor vincular por las PK
Código MySQL:
Ver original
  1. INNER JOIN gruposhorarios ON grupos.IdGrupo = gruposhorarios.IdGrupo
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 30/09/2013, 04:38
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Que estoy haciendo mal (Count)

Gracias por tu interés.
En la consulta el resultado me muestra un listado de los alumnos cuyo
idgrupoalumnos = idgrupo.grupos.

Muestra los alumnos de un mismo grupo ( 8 alumnos) pero el count me indica el doble (16) cuando en realiadad hay sólo 8.
Espero haberme explicado.

El listado sale los nombre de los alumnos y los debería contar.

Gracias
  #4 (permalink)  
Antiguo 30/09/2013, 06:28
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Que estoy haciendo mal (Count)

Código MySQL:
Ver original
  1.        alumnos.IdAlumno,
  2.        alumnos.`Nombre Alumno`,
  3.        alumnos.`Primer Apellido`,
  4.        alumnos.`Segundo Apellido`,
  5.        alumnos.Confirmado,
  6.        alumnos.IdGrupo,
  7.        CONCAT_WS(' ',
  8.                      alumnos.`Nombre Alumno`,
  9.                      alumnos.`Primer Apellido`,
  10.                      alumnos.`Segundo Apellido`) NombreAlumno
  11.        grupos.IdGrupo,
  12.        grupos.`Nombre Grupo`,
  13.        gruposhorarios.Nombre,
  14.        gruposhorarios.Dia,
  15.        gruposhorarios.`Nombre Grupo`,
  16.        gruposhorarios.HoraInicio,
  17.        gruposhorarios.HoraFin,
  18.        gruposhorarios.Ubicacion,
  19.        gruposhorarios.Memo,
  20.        CONCAT_WS(' ',
  21.                     gruposhorarios.Dia,
  22.                     gruposhorarios.HoraInicio,
  23.                     gruposhorarios.HoraFin) Horarios
  24.        sbc.nalumnos
  25.        alumnos INNER JOIN grupos ON alumnos.IdGrupo= grupos.IdGrupo
  26.                      INNER JOIN
  27.                            gruposhorarios ON grupos.IdGrupo = gruposhorarios.IdGrupo
  28.                      INNER JOIN (
  29.                              SELECT
  30.                                 grupos.IdGrupo,
  31.                                 gruposhorarios.Dia,
  32.                                 gruposhorarios.HoraInicio,
  33.                                 gruposhorarios.HoraFin,
  34.                                 gruposhorarios.Ubicacion,
  35.                                COUNT(alumnos.IdAlumno) Nalumnos
  36.                             FROM
  37.                                   alumnos INNER JOIN grupos
  38.                                                       ON alumnos.IdGrupo= grupos.IdGrupo
  39.                                                 INNER JOIN gruposhorarios
  40.                                                       ON grupos.IdGrupo = gruposhorarios.IdGrupo
  41.                               WHERE (alumnos.Confirmado = '1')
  42.                                        OR (alumnos.Confirmado = '4')
  43.                               GROUP BY
  44.                                     grupos.IdGrupo,
  45.                                     gruposhorarios.Dia,
  46.                                     gruposhorarios.HoraInicio,
  47.                                     gruposhorarios.HoraFin,
  48.                                     gruposhorarios.Ubicacion) sbc
  49.                                            ON grupos.IdGrupo=sbc.IdGrupo
  50.                                               AND gruposhorarios.Dia=sbc.Dia
  51.                                               AND gruposhorarios.HoraInicio=sbc.HoraInicio
  52.                                               AND gruposhorarios.HoraFin=sbc.HoraFin
  53.                                               AND gruposhorarios.Ubicacion=sbc.Ubicacion
  54. WHERE (alumnos.Confirmado = '1')
  55.              OR (alumnos.Confirmado = '4');
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 01/10/2013, 00:43
 
Fecha de Ingreso: noviembre-2012
Mensajes: 73
Antigüedad: 11 años, 5 meses
Puntos: 1
Respuesta: Que estoy haciendo mal (Count)

Hola gracias por el interés, he ejecutado tu consulta y me da el siguiente error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'grupos.IdGrupo, grupos.`Nombre Grupo`, gruposhorarios.No' at line 12


Gracias
  #6 (permalink)  
Antiguo 01/10/2013, 03:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Que estoy haciendo mal (Count)

Código MySQL:
Ver original
  1.                      alumnos.`Nombre Alumno`,
  2.                      alumnos.`Primer Apellido`,
  3.                      alumnos.`Segundo Apellido`) NombreAlumno,  ///<---Esta coma
  4.        grupos.IdGrupo,

Código MySQL:
Ver original
  1.                     gruposhorarios.Dia,
  2.                     gruposhorarios.HoraInicio,
  3.                     gruposhorarios.HoraFin) Horarios, //<---y esta
  4.        sbc.nalumnos

La intención és ayudar, y no mandar cosas con errores, pero aún y asi pueden colarse errores, el primer interesado a depurar eres tu, en este case el error es evidente.

Luego puede haber otros sobre todo por que no tengo toda la información ni muy claro lo que estas intentando... ojo que he usado
gruposhorarios.IdGrupo
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: haciendo, join, 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 18:54.