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

Duda con Top

Estas en el tema de Duda con Top en el foro de Mysql en Foros del Web. Buenas, tengo una duda con mi siguiente propósito: Pretendo obtener una lista con los 10 usuarios con más puntos. La info del usuario está en ...
  #1 (permalink)  
Antiguo 21/08/2008, 12:00
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Duda con Top

Buenas, tengo una duda con mi siguiente propósito:
Pretendo obtener una lista con los 10 usuarios con más puntos. La info del usuario está en una tabla y los puntos en otra con la siguiente estructura:
id_user | puntos
3 | 5
215 | 3
...

Cómo podría hacerlo, porque no le puedo decir directamente que ordene por puntos ASC o DESC, tendria que ordenar según la suma de los puntos de cada uno, cómo podría hacerlo?


Mil gracias
  #2 (permalink)  
Antiguo 21/08/2008, 12:18
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Duda con Top

Cita:
SELECT id, Sum(puntos) AS points FROM tabla GROUP BY id ORDER BY points
por ejemplo? Tiene sentido no?
  #3 (permalink)  
Antiguo 21/08/2008, 13:24
RJD
 
Fecha de Ingreso: enero-2006
Mensajes: 64
Antigüedad: 18 años, 3 meses
Puntos: 0
Respuesta: Duda con Top

Alguna otra idea de como hacerlo??? No estoy muy seguro...

Con JOIN se puede hacer algo?

Última edición por RJD; 21/08/2008 a las 13:29
  #4 (permalink)  
Antiguo 21/08/2008, 16:08
Avatar de Taldreakan  
Fecha de Ingreso: julio-2008
Mensajes: 128
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Duda con Top

Prueba con esto

Código:
SELECT txt_user, SUM(int_points) AS points FROM tb_user
	LEFT JOIN tb_points ON fk_user = id_user
GROUP BY txt_user ORDER BY points
  #5 (permalink)  
Antiguo 21/08/2008, 16:42
Avatar de Avatar810  
Fecha de Ingreso: agosto-2007
Ubicación: Por rumbos Regios
Mensajes: 485
Antigüedad: 16 años, 8 meses
Puntos: 23
Respuesta: Duda con Top

Yo recomiendo inner join y asi te aseguras tenga relacion en las 2 tablas

SELECT txt_user, SUM(int_points) AS points
FROM tb_user INNER JOIN tb_points ON fk_user = id_user
GROUP BY txt_user ORDER BY DESC points
  #6 (permalink)  
Antiguo 21/08/2008, 20:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Duda con Top

La solución es parecida a la que te propone RJD:

Código:
SELECT id, Sum(puntos) TotalPuntos 
FROM tabla 
GROUP BY id 
ORDER BY points DESC LIMIT 10;
El INNER JOIN que plantea Avatar810 se debe usar en conjunto con este esquema, simplemente para que te devuelva los datos completos del user.

Código:
SELECT id, nombre, Sum(puntos) TotalPuntos 
FROM tabla INNER JOIN usuarios USING(id)
GROUP BY id 
ORDER BY points DESC LIMIT 10;
El uso de AS es innecesario para generar el alias. Los DBMS suprimieron la necesidad de ponerlo hace mucho. Ni Oracle, ni DB2 lo usan...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 23/08/2008, 08:33
Avatar de Taldreakan  
Fecha de Ingreso: julio-2008
Mensajes: 128
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: Duda con Top

Cita:
El uso de AS es innecesario para generar el alias. Los DBMS suprimieron la necesidad de ponerlo hace mucho. Ni Oracle, ni DB2 lo usan...
Orale, no sabia esto, creo que me quede con la vieja escuela.
No cabe duda que siempre se aprende algo nuevo.
Saludos. Bye.
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 03:49.