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

Group by order by sql

Estas en el tema de Group by order by sql en el foro de Bases de Datos General en Foros del Web. Hola a todods Tengo una base de datos con 3 personas y esas 3 personas han hecho cada una varias carreras. Quiero uqe una consulta ...
  #1 (permalink)  
Antiguo 26/03/2009, 04:25
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 1 mes
Puntos: 11
Group by order by sql

Hola a todods

Tengo una base de datos con 3 personas y esas 3 personas han hecho cada una varias carreras. Quiero uqe una consulta muestre tan solo el mejor tiempo de cada persona. He probado lo siguiente pero no funciona:

SELECT nombre, tiempo FROM corredores GROUP BY nombre ORDER BY tiempo

asi me da reesutlados, epro me da el primer registro de la base de datos

SELECT nombre, tiempo FROM corredores ORDER BY tiempo GROUP BY nombre
Y asi da error.

Alguna idea?
  #2 (permalink)  
Antiguo 26/03/2009, 05:04
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Group by order by sql

Primero debes poner el group by antes del order by como en tu primera sentencia.

Trata con:

Código sql:
Ver original
  1. SELECT nombre, MAX(tiempo) FROM corredores GROUP BY nombre

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 26/03/2009, 05:26
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 1 mes
Puntos: 11
Respuesta: Group by order by sql

Ese codigo no me da ningun resultado :(
  #4 (permalink)  
Antiguo 26/03/2009, 05:33
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Group by order by sql

que tipo de dato tienes en el campo tiempo?

la función max, te selecciona el mayor tiempo de todo el campo.

la función min el menor. creo que necesitas el menor :S
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 26/03/2009, 06:41
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 1 mes
Puntos: 11
Respuesta: Group by order by sql

Cita:
Iniciado por huesos52 Ver Mensaje
que tipo de dato tienes en el campo tiempo?

la función max, te selecciona el mayor tiempo de todo el campo.

la función min el menor. creo que necesitas el menor :S
Es que el problema es que esa sentencia no me da ningun resutlado, ni usanod max ni min

el dato es un numero
  #6 (permalink)  
Antiguo 26/03/2009, 07:36
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Group by order by sql

Cita:
Hola a todods

Tengo una base de datos con 3 personas y esas 3 personas han hecho cada una varias carreras. Quiero uqe una consulta muestre tan solo el mejor tiempo de cada persona. He probado lo siguiente pero no funciona:

SELECT nombre, tiempo FROM corredores GROUP BY nombre ORDER BY tiempo

asi me da reesutlados, epro me da el primer registro de la base de datos

SELECT nombre, tiempo FROM corredores ORDER BY tiempo GROUP BY nombre Y asi da error.

Alguna idea?
Según entiendo, tiempo y nombre se encuentran en la tabla corredores, y cada corredor ha hecho varias carreras. para cada corredor necesitas el mejor tiempo de todos los datos registrados.

Código MySQL:
Ver original
  1. mysql> create table corredores(nombre text, tiempo float);
  2. Query OK, 0 rows affected (0.08 sec)
  3.  
  4. mysql> insert into corredores values('daniel',22.5);
  5. Query OK, 1 row affected (0.00 sec)
  6.  
  7. mysql> insert into corredores values('daniel',22.6);
  8. Query OK, 1 row affected (0.00 sec)
  9.  
  10. mysql> insert into corredores values('daniel',22.9);
  11. Query OK, 1 row affected (0.00 sec)
  12.  
  13. mysql> insert into corredores values('daniel',23.2);
  14. Query OK, 1 row affected (0.00 sec)
  15.  
  16. mysql> insert into corredores values('daniel',21.2);
  17. Query OK, 1 row affected (0.00 sec)
  18.  
  19. mysql> insert into corredores values('daniel',19.23);
  20. Query OK, 1 row affected (0.00 sec)
  21.  
  22. mysql> insert into corredores values('diego',18.23);
  23. Query OK, 1 row affected (0.02 sec)
  24.  
  25. mysql> insert into corredores values('diego',16.2);
  26. Query OK, 1 row affected (0.00 sec)
  27.  
  28. mysql> insert into corredores values('diego',17.2);
  29. Query OK, 1 row affected (0.00 sec)
  30.  
  31. mysql> select nombre, min(tiempo) as mejor_tiempo from corredores group by nombre;
  32. +--------+--------------------+
  33. | nombre | mejor_tiempo |
  34. +--------+--------------------+
  35. | daniel |       19.23 |
  36. | diego  |        16.2 |
  37. +--------+-------------+
  38. 2 rows in set (0.03 sec)

Puede ser que estes planteando mal la pregunta, por que esta sentencia si genera un resultado.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 26/03/2009, 11:23
 
Fecha de Ingreso: marzo-2009
Mensajes: 395
Antigüedad: 15 años, 1 mes
Puntos: 11
Respuesta: Group by order by sql

Cita:
Puede ser que estes planteando mal la pregunta, por que esta sentencia si genera un resultado.
Muchas gracias porque ya funciona. ME falto poner lo de as... YO habia puesto solo min(tiempo) y no min(tiempo) as mejor tiempo

Ahora si que va, asi que muchisimas gracias por resolverme esta gran duda ;)
  #8 (permalink)  
Antiguo 26/03/2009, 13:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Group by order by sql

Que bueno que ya te funcione, sin embargo el AS no es relevante en la consulta. lo único que hace es darle un titulo a la salida.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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 10:54.