SQL - AYUDA CON DISTINCT

 
Vista:

AYUDA CON DISTINCT

Publicado por Oscar (1 intervención) el 11/06/2010 00:05:38
Buena tarde para todos.
Bueno tengo dos tablas en MySQL, una se llama juego y otra se llama usuario, lo que quiero es tirar una consulta SQL que me muestre los 5 usuarios con el mejor puntaje, pero que si un usuario tiene registrados varios puntajes, solo me muestre el mejor osea el más alto.

Aqui mi consulta:

tabla usuario

id_usuario | nombre
---------------+--------------
1 | Carlos
2 | Mario
3 | Martha
4 | Pedro
5 | Luis

Tabla juego

id_juego | id_usuario | puntaje
------------+----------------+------------
1 3 100
2 5 90
3 5 30
4 5 40
5 1 120
6 3 20
7 4 50
8 1 80
9 4 60
10 2 10

Bueno ahora my sql:

SELECT DISTINCT (a.id_usuario), b.nombre, a.puntaje
FROM puntaje a, usuario b
WHERE a.id_usuario = b.id_usuario
ORDER BY puntaje DESC LIMIT 5

Se supone que el anterior query debe traerme los 5 mejores puntajes de la tabla juego, pero sin repetir el usuario, pero no me funciona :(

El resultado ideal seria:

id_usuario | nombre | puntaje
---------------+-----------+------------
1 carlos 120
3 Martha 100
5 Luis 90
4 Pedro 60
2 Mario 10

Como ven, en el resultado no se debe repetir los putanjes de Carlos (80) ni el (50) de Pedro puesto que ya salieron con un puntaje mejor.

Agradesco de antemano cualquier ayuda que me puedan brindar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:AYUDA CON DISTINCT

Publicado por Leonardo Josue (1173 intervenciones) el 11/06/2010 18:16:42
Buenos días Oscar... dado que necesitas encontrar el mejor puntaje para cada uno de los usuarios entonces debes utilizar la función MAX, agrupando en este caso por los campos id_usuario y nombre.... la consulta quedaría así:

SELECT a.id_usuario, b.nombre, max(a.puntaje)
FROM puntaje a, usuario b
WHERE a.id_usuario = b.id_usuario
GROUP BY a.id_usuario, b.nombre
ORDER BY puntaje DESC LIMIT 5

Con esto de debería regresar el resultado que deseas.

Saludos y espero tus comentarios.
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar