Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/07/2012, 19:13
Avatar de latinpower
latinpower
 
Fecha de Ingreso: septiembre-2010
Ubicación: Canelones
Mensajes: 116
Antigüedad: 13 años, 8 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