SQL - group by y distinct

 
Vista:

group by y distinct

Publicado por indio (1 intervención) el 11/01/2008 10:58:15
Muy buenas:

El título no es bueno, pero no se como resumir la duda ;)

El caso es el siguiente:
Necesito ordenar articulos según su puntuación, pero a su vez solo ha de tenerse en cuenta el mejor artículo de cada usuario, es decir un usuario no puede tener dos artículos entre los mejor valorados, partiendo de una simple consulta del tipo:

select sum Puntuacion.pun, Usuario.nick, Articulo.titulo FROM puntuacions as Puntuacion LEFT JOIN articulos as Articulo ON (Puntuacion.articulo_id=Articulo.id) LEFT JOIN usuarios as Usuario ON (Articulo.usuario_id=Usuario.id) GROUP BY articulo_id order by pun DESC limit 5;

Nos mostraría los 5 articulos con mas puntos, pero... como podría hacer para que fueran los 5 mejores artículos de distintos usuarios?

No se si se me habrá entendido XD.

Seguramente sea simple, pero estoy atascado, muchas gracias de antemano.
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

RE:group by y distinct

Publicado por Franklin Gamboa (15 intervenciones) el 11/01/2008 15:56:09
Dejame ver si te entiendo bien:

Lo que quieres es saber cuales son los 5 articulos con la puntuación mas alta sin importar el usuario?

Si es así entonces nada mas debes remover el LEFT JOIN que haces a la tabla usuarios, esto haría que tome la puntuación global de los articulos sin importar el usuario.

Ahora si quieres poder filtrar entre un grupo de usuarios y que la consulta muestre de acuerdo a este grupo de usuarios los articulos con mas puntuación, simplemente debes agregarle a la consulta que ya tienes lo siguiente:

Where Usuario.id in (<Lista de usuarios>)

Espero haber aclarado tus dudas.

Saludos,

Franklin Gamboa
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

RE:group by y distinct

Publicado por indio (1 intervención) el 11/01/2008 22:55:29
No, es un poco mas complicado, es mostrar los 5 articulos mejor votados pero de distintos usuarios, la cuestión es que primero se tiene que agrupar por articulos para sumar los puntos de los artículos y de estos los 5 primeros con distintos usuarios. Pero bueno ya está lo solucioné de una manera que no me deja muy agusto haciendo una consulta anidada y luego agrupando por usuarios... pero me da que no hay una solución directa :(.

Gracias de todos modos.
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

RE:group by y distinct

Publicado por Fernando (8 intervenciones) el 12/01/2008 11:22:21
Hola, yo usaría el rank() o el rownumber (usás SQL 2005?). Usá la pción q no te rankea empatados si no q solo rankea 1,2,3..N (sin repetir número de ranking) Luego tomas el TOP 5 con rank = 1 y listo... creo q tendría q funcionar

Saludos
Fernando
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

RE:group by y distinct

Publicado por indio (1 intervención) el 14/01/2008 09:27:00
Tampoco, ya que se ordena por puntuación, la cuestión no es eliminar los puntos duplicados, sino eliminar los usuarios duplicados con lo que hay que agrupar otra vez. ;)

Saludos.
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

RE:group by y distinct

Publicado por Magic Studios Communications,  (1 intervención) el 21/02/2008 18:01:58
Necesito un programador de la india con urgencia para desarollar proyecto contamos con un no tan buen presupuesto pero estamos para negociar escribanme o contactenme al ...

787-553-0890
787-259-3297
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