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

[SOLUCIONADO] consulta con SUM y GROUP BY

Estas en el tema de consulta con SUM y GROUP BY en el foro de Mysql en Foros del Web. Muy buenas. Tengo un problema con una consulta. Explico básicamente los detalles: Tengo una tabla con puntuaciones de usuarios (en una tabla 'grupos'). Estos usuarios ...
  #1 (permalink)  
Antiguo 07/06/2013, 03:58
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 5 meses
Puntos: 11
consulta con SUM y GROUP BY

Muy buenas.

Tengo un problema con una consulta. Explico básicamente los detalles:

Tengo una tabla con puntuaciones de usuarios (en una tabla 'grupos'). Estos usuarios pertenecen a determinados grupos (cuya información se encuentra en otra tabla 'usuarios').

(Si un usuario no pertenece a ningún grupo, se le asigna un cero en el nombre del grupo).

Los puntos de un determinado grupo se obtienen de hacer la suma de los puntos de todos los usuarios que pertenecen a dicho grupo.

Lo que necesito es hacer una consulta que busque el número de grupos que tengan el mismo número de puntos que un determinado grupo.

Estoy probando con consultas del estilo:

Código MySQL:
Ver original
  1. SELECT grupos.nmbgrupo AS nombre, SUM(usuarios.puntos) AS suma
  2. FROM grupos
  3. INNER JOIN usuarios USING (ID)
  4. WHERE grupos.nmbgrupo NOT LIKE '0'  AND SUM(usuarios.puntos) = 'xxx'
  5. GROUP BY grupos.nmbgrupo
  6. ORDER BY nombre ASC

Pero todo el rato me da un error: “Invalid use of group function”

Alguien me puede ayudar a encontrar el fallo, por favor?

Muchas gracias!
  #2 (permalink)  
Antiguo 07/06/2013, 07:43
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: consulta con SUM y GROUP BY

Hola oms02:

El problema está en que no puedes usar el SUM en el WHERE, es por eso que marca el error... puedes intentar hacerlo en la cláusula HAVING:

Código MySQL:
Ver original
  1. SELECT grupos.nmbgrupo AS nombre, SUM(usuarios.puntos) AS suma
  2. FROM grupos
  3. INNER JOIN usuarios USING (ID)
  4. WHERE grupos.nmbgrupo != 0  
  5. GROUP BY grupos.nmbgrupo
  6. HAVING SUM(usuarios.puntos) = Aquí pones la cantidad sin comillas
  7. ORDER BY nombre ASC

Observa que quité la condición NOT LIKE, ya que esta tiene un pésimo rendimiento... en lugar de eso utiliza != (diferente)

lo mismo con la comparación de la suma, cuando se trata de cantidades NO LAS COLOCAS ENTRE COMILLAS SIMPLES, ya que estás obligando al motor de BD a que haga conversiones innecesarias.

haz la prueba y nos comentas. Si continuas con problemas postea algunos datos de ejemplo de tus tablas y dinos qué es lo que esperas como salida, de esta manera será más fácil tratar de ayudarte.

Saludos
Leo.
  #3 (permalink)  
Antiguo 07/06/2013, 08:54
 
Fecha de Ingreso: junio-2010
Mensajes: 373
Antigüedad: 14 años, 5 meses
Puntos: 11
Respuesta: consulta con SUM y GROUP BY

Ha salido perfecto Leo.

Muchisimas gracias!

Etiquetas: group, join, select, sum, 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 13:28.