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

SUM() que sea multiplo de 3 y algo mas

Estas en el tema de SUM() que sea multiplo de 3 y algo mas en el foro de Bases de Datos General en Foros del Web. Recurro ha ustedes porque necesito pasar algo que hasta ahora realizaba con PHP pero que estoy casi seguro que se puede hacer directamente en la ...
  #1 (permalink)  
Antiguo 11/04/2005, 23:20
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 9 meses
Puntos: 10
SUM() que sea multiplo de 3 y algo mas

Recurro ha ustedes porque necesito pasar algo que hasta ahora realizaba con PHP pero que estoy casi seguro que se puede hacer directamente en la consulta SQL ahorrando bastante tiempo y codigo. Pero, obviamente, mis conocimientos no me permiten llegar a la solucion deseada.

El tema es el siguiente: tengo una tabla donde guardo datos de jugadores de un torneo de futbol fecha a fecha. La estructura de la tabla "estadisticas" de la base (Mysql por cierto) es mas o menos asi:

-------------------------------------------------------
id | jugador | equipo | fecha | dato | valor | campeonato
-------------------------------------------------------

Donde fecha no es la de dia sino la fecha del torneo (1º fecha, 2º fecha, etc).
Hay 3 tipos de "dato": 1 = goles - 2 = tarjetas rojas - 3 = amarillas los cuales van acompañoados de sus valores correspondientes (dato: 1 y valor: 2 == 2 goles).

y lo que yo necesito hacer es sacar todos los jugadores donde la suma de los distintos "valor" correspondientes al dato 3 sea multiplo de 3 y que la fecha del ultimo dato sea igual a la variable $fecha_actual.

No se si sere claro ...

Hasta ahora lo que hacia era sacar todos los datos asi

Código:
$sql="SELECT estadisticas.jugador, estadisticas.fecha,  ";
$sql.="jugadores.nombre, equipos.nombre as nombre_equipo, grupo, SUM(valor) as total ";
$sql.="FROM estadisticas ";
$sql.="LEFT JOIN equipos ON (estadisticas.equipo = equipos.id) ";
$sql.="LEFT JOIN jugadores ON (estadisticas.jugador = jugadores.id) ";
$sql.="WHERE estadisticas.dato='3' and fecha<='$fecha_actual' ";
$sql.="and estadisticas.campeonato='$torneo_actual' and grupo='A' ";
$sql.="GROUP BY jugador ";
$sql.="ORDER BY total DESC, grupo ASC, jugador ASC, fecha DESC ";
y guardaba la info en un array segun algunos condicionales, pero eso me parece muy impractico y seguramente consume muchos recurso.

Si alguien tiene alguna idea se la agradesco desde ya.
__________________
oohh... quisiera ser godines!!!
  #2 (permalink)  
Antiguo 12/04/2005, 00:54
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Para calcular si un valor es múltiplo de otro, lo que se hace es dividirlo y que el resto sea 0. Pues bien, la función que te permite hacer esto en mysql es MOD, por lo que creo que esto te puede ayudar:
Código:
select jugador, sum(valor)
from tabla 
where dato=3
having mod (sum(valor), 3) = 0
Un saludo.
__________________
Estoy contagiado de Generación-I
  #3 (permalink)  
Antiguo 12/04/2005, 08:53
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 9 meses
Puntos: 10
Gracias por responder vice... probe la forma que me decis pero me da error, mas especificamente:
"
#1064 - 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 '(sum(valor), 3) = 0' at line 1
"
Estuve haciendo varias pruebas y me sigue dando error. Aguna idea de que puede ser?
__________________
oohh... quisiera ser godines!!!
  #4 (permalink)  
Antiguo 12/04/2005, 09:48
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Faltaba el group by:
Código:
select jugador, sum(valor)
from tabla 
where dato=3
group by jugador
having mod (sum(valor), 3) = 0
Un saludo.
__________________
Estoy contagiado de Generación-I
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 14:18.