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

seleccionar registro con valor máximo en una columna

Estas en el tema de seleccionar registro con valor máximo en una columna en el foro de Mysql en Foros del Web. En una tabla tenemos un listado de vídeos, un contador de reproducciones y otros datos (titulo de video, id de usuario, etc). Código: clave_usuario clave_video ...
  #1 (permalink)  
Antiguo 05/10/2012, 03:25
 
Fecha de Ingreso: octubre-2012
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
seleccionar registro con valor máximo en una columna

En una tabla tenemos un listado de vídeos, un contador de reproducciones y otros datos (titulo de video, id de usuario, etc).

Código:
clave_usuario   clave_video   contador
246             1             3
123             2             1
246             3             88
123             4             99
Estoy tratando ajustar una query para seleccionar un registro por usuario con el máximo contador. Es decir, en la anterior tabla, quiero recuperar los videos mas votados por usuario:

Código:
clave_usuario   clave_video   contador
246             3             88
123             4             99
Sin embargo, con la siguiente query solo puedo recuperar los primero registros en introducirse independientemente del número de votos (contador)
Código:
clave_usuario   clave_video   contador
246             1             3
123             2             1
Esta es la query real que estoy usando:
Código:
SELECT vid.vid_clave AS vidId,
	vid.vid_usu_clave AS usuId,
	vid.vid_archivo AS youtubeId,
	vid.vid_contador AS contador,
	vid.vid_titulo AS titulo,
	vid.vid_descripcion AS descripcion,
	usu.usu_nick AS nick
FROM scx_videos vid
INNER JOIN scx_usuarios usu
ON usu.usu_clave = vid.vid_usu_clave
WHERE usu_validado = 1
GROUP BY usu_nick 
ORDER BY vid_contador DESC, vidId DESC
LIMIT 10
He intentado añadir " HAVING MAX(vid_contador)" al GROUP BY pero los resultados son idénticos.

Quizá la solución necesite subquerys, crear vistas, aunque eso no sé aplicarlo aun...

¿Seríais tan amables de echarme un cable?
gracias!
  #2 (permalink)  
Antiguo 05/10/2012, 04:31
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, 5 meses
Puntos: 2658
Respuesta: seleccionar registro con valor máximo en una columna

Este es un tema recurrente. Ya lo hemos tratado infinidad de veces.
El problema es la forma en que se combinan el GROUP BY y el ORDER BY. MySQL primero agrupa y despues ordena, pero agrupa en funcion del primero encontrado en la tabla.
Cuando quieres hacer agrupamiento con orden, necesitas primero ordenar:
Código MySQL:
Ver original
  1. SELECT vidId,
  2.     usuId,
  3.     youtubeId,
  4.     contador,
  5.     titulo,
  6.     descripcion,
  7.     nick
  8. FROM (SELECT vid.vid_clave vidId,
  9.          vid.vid_usu_clave usuId,
  10.          vid.vid_archivo youtubeId,
  11.          vid.vid_contador contador,
  12.          vid.vid_titulo titulo,
  13.          vid.vid_descripcion descripcion,
  14.          usu.usu_nick nick
  15.     FROM scx_videos vid
  16.          INNER JOIN scx_usuarios usu ON usu.usu_clave = vid.vid_usu_clave
  17.      WHERE usu_validado = 1
  18.     ORDER BY vid_contador DESC, vidId DESC) T1
  19. GROUP BY nick
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/10/2012, 04:50
 
Fecha de Ingreso: octubre-2012
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Respuesta: seleccionar registro con valor máximo en una columna

Siento meter preguntas recurrentes. Llevo mil horas buscando soluciones. El problema es no saber qué concepto buscar, el no tener ni idea de como agrupa y ordena MySQL.

La buena noticia es que ¡Ha funcionado a la perfección!

¡¡Mil gracias!!!

saludos
  #4 (permalink)  
Antiguo 05/10/2012, 06:24
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, 5 meses
Puntos: 2658
Respuesta: seleccionar registro con valor máximo en una columna

Cita:
El problema es no saber qué concepto buscar, el no tener ni idea de como agrupa y ordena MySQL.
No es problema, pero deberías aprovechar el buscador del foro cuando se trata de problemas de tipo genérico. Seguro que encontrabas la solución y muy pronto.
Me alegro que te sirviera.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql
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 20:11.