Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/09/2009, 02:29
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 17 años
Puntos: 574
Respuesta: Ayuda con INNER JOIN y SUM

Lo hace por que primero hace el join y despues el SUM group by

Es decir si tenemos


Puntage
usuario:::puntos ....
1::::::::::::::1
1::::::::::::::2
2::::::::::::::5

Usuarios
id:::::Nombre...
1::::::Pepito
2::::::Pepita

Fotos
idfoto:::::usuarioId....
1::::::::::::::1
2::::::::::::::1
3::::::::::::::1
4::::::::::::::2

Puntage INNER JOIN Usuarios

usuario:::puntos:::id:::::Nombre...
1::::::::::::::1::::::::::1::::::Pepito
1::::::::::::::2::::::::::1::::::Pepito
2::::::::::::::5::::::::::2::::::Pepita

(Lo anterior)INNER JOIN Fotos

usuario:::puntos:::id:::::Nombre:::::idfoto:::::us uarioId....
1::::::::::::::1::::::::::1::::::Pepito::::::::1:: :::::::::1
1::::::::::::::1::::::::::1::::::Pepito::::::::2:: :::::::::1
1::::::::::::::1::::::::::1::::::Pepito::::::::3:: :::::::::1
1::::::::::::::2::::::::::1::::::Pepito::::::::1:: :::::::::1
1::::::::::::::2::::::::::1::::::Pepito::::::::2:: :::::::::1
1::::::::::::::2::::::::::1::::::Pepito::::::::3:: :::::::::1
2::::::::::::::5::::::::::2::::::Pepita::::::::4:: :::::::::2

si sumas por usuarios tendrás

id:::::Nombre:::Sum(Puntos)
1::::::Pepito:::::::::::::9
2::::::Pepita:::::::::::::5

Mira si esto te funciona, y analiza que hace....

Código sql:
Ver original
  1. SELECT
  2.     puntaje.usuario,
  3.     SUM(puntaje.puntos) AS totalPuntos,
  4.     usuarios.id AS usuarioId
  5. FROM
  6.     puntaje
  7.     INNER JOIN usuarios ON puntaje.usuario=usuarios.usuario
  8. WHERE
  9.     usuarios.activo=1 AND
  10.     puntaje.fecha >= DATE_SUB(curdate(), INTERVAL 1 MONTH)
  11. HAVING
  12.     usuarios.id IN (SELECT DISTINCT usuarioId FROM fotos)
  13.     /*porque debe tener al menos una foto*/
  14. GROUP BY puntaje.usuario
  15. ORDER BY totalPuntos DESC
  16. LIMIT 10


Pregunta
Si alguien NO tiene fotos puede tener puntos?....

Si fuera que NO luego cambiando de INNER JOIN a LEFT JOIN entre puntaje y usuarios no tendrias que complicarte la vida con la tabla Fotos... puesto que solo saldran los que esten en puntage, es decir los que tienen puntos, es decir los que tienen alguna foto.... ya que si no tienen fotos no tienen puntos....????!!!

Quim

Última edición por quimfv; 10/09/2009 a las 02:39