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

Problema con count()

Estas en el tema de Problema con count() en el foro de Mysql en Foros del Web. Hola, Les cuento un poco la situación. Tengo estas tablas :Atleta: :Medallas: id, tipo, idactuacion :Actuaciones: :Deportes: :Disciplinas: Donde un atleta participa en deportes, que ...
  #1 (permalink)  
Antiguo 19/07/2012, 19:13
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Problema con count()

Hola,

Les cuento un poco la situación.

Tengo estas tablas

:Atleta:
:Medallas:
id, tipo, idactuacion
:Actuaciones:
:Deportes:
:Disciplinas:

Donde un atleta participa en deportes, que pertenencen a disciplinas. El atleta actuá y se le pueden asignar medallas por estas.

Ahora yo quiero listar de cada atleta, datos como su nombre, apellido, pais, depores y disciplinas en la que participa y la cantidad de medallas, es decir, la cantidad de veces que aparece en actuaciones y éstas tienen una medalla en la tabla medalla.

En la tabla actuaciones, aparecen 5 atletas diferentes, dónde el primero actuo dos veces.

En la tabla medalla, el primer atleta gano 2 medallas y el segundo y tercero 1.

Tengo este select

Código MySQL:
Ver original
  1. select a.nombre 'Nombre', DATE(a.fechanacimiento) 'Fecha de Nacimiento', avg(act.rendimiento)'Media',
  2.                                     group_concat(distinct d.nombre separator ', ')'Deportes que participa',
  3.                                     group_concat(distinct dis.nombre separator ', ') 'Disciplinas pertenecientes',
  4.                                     count(distinct m.idactuacion)
  5.                                     from atleta a
  6.                                     left join actuación act on act.idatleta = a.idatleta
  7.                                     left join atleta_deporte ad on a.idatleta = ad.idatleta
  8.                                     left join deporte d on ad.iddeporte = d.iddeporte
  9.                                     left join disciplina dis on dis.iddisciplina = d.iddisciplina
  10.                                     left join medalla m on m.idactuacion = act.idactuación
  11.                                     inner join ciudad c on a.idciudad = c.idciudad
  12.                                     inner join pais p on p.idpais = c.idpais
  13.                                     where(p.idpais = 1)
  14.                                     group by a.idatleta;

Me muestra que el primer usuario tiene 2 medallas(que está bien) y que el quinto tiene 0. Sin embargo, el segundo y tercero no aparecen.

¿Alguna idea? Se que se podría solucionar con 2 select unidos, pero busco hacerlo en uno solo.

se aprecia cualquier ayuda.

--------
ya lo arregle, el problema estaba en el where, que limitaba por países. Disculpa las molestias.

Última edición por latinpower; 19/07/2012 a las 19:26
  #2 (permalink)  
Antiguo 20/07/2012, 01:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con count()

Código MySQL:
Ver original
  1. FROM (((((((atleta a
  2.         INNER JOIN ciudad c on a.idciudad = c.idciudad)
  3.         INNER JOIN pais p on p.idpais = c.idpais)
  4.            INNER JOIN atleta_deporte ad on a.idatleta = ad.idatleta)
  5.            INNER JOIN deporte d on ad.iddeporte = d.iddeporte)
  6.            INNER JOIN disciplina dis on dis.iddisciplina = d.iddisciplina)
  7.               LEFT JOIN actuación act on act.idatleta = a.idatleta)
  8.               LEFT JOIN medalla m on m.idactuacion = act.idactuación

De entrada asi se lee mejor y tenias LEFT JOIN innecesarios....todo atleta tendrà como mínimo un deporte y toda disciplina pertenecerá a un deporte.

Muestranos la estruectura de TODAS las tablas que usas y sus relaciones, y un juego de datos coherente de todas ellas....

te falta el count(m.idmedalla)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 22/07/2012, 14:30
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Problema con count()

como es el tema de los () que usas?
  #4 (permalink)  
Antiguo 22/07/2012, 16:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con count()

Cada parerja de tablas se encierra en un parentesis....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 23/07/2012, 14:50
Avatar de latinpower  
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Problema con count()

tiene algún motivo especial?
  #6 (permalink)  
Antiguo 24/07/2012, 03:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema con count()

No se si son obligatorios pero ayudan a la lectura y una cierta ordenacion por relacion tambien ayuda.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: join, select, tabla, tipo
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 23:33.