Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   DISTINCT a un solo campo pero que además me muestre otros (https://www.clubdelphi.com/foros/showthread.php?t=53902)

neo83 04-03-2008 16:40:47

DISTINCT a un solo campo pero que además me muestre otros
 
Buenas! Como estan? Bueno, esa es la consulta:

Como hago un DISTINCT a un solo campo pero que además me muestre otros?

SELECT nombre, apellido, tiempo FROM tabla WHERE estado='gano' ORDER BY tiempo LIMIT 10

Quiero que el distinct se haga sobre el nombre y apellido, pero que ademas me muestre tiempo, se puede?
Gracias!

duilioisola 04-03-2008 18:46:06

Cuál debe ser el resuptado?
Imagínate esta tabla:
Código:

Juan Perez 10 gano
Juan Perez 20 gano
Juan Perez 30 gano

Qué queres que te devuelva?
- Un solo tiempo? (min/max/avg)
Prueba con el group by
Código SQL [-]
SELECT nombre, apellido, min(tiempo) FROM tabla 
WHERE estado='gano' 
GROUP BY nombre,apellido
Esto devolvería
Código:

Juan Perez 10
Nota: No se de MySQL, pero en Firebird sería algo como lo que he puesto.

neo83 04-03-2008 19:22:29

Gracias!!! eso funciona bien, solo hay una cosa, por alguna razon no me los esta ordenando por tiempo :S

neo83 04-03-2008 19:30:45

Esta consulta devuelve mal el orden:

SELECT nombre, apellido, min( tiempo )
FROM tabla
WHERE estado = 'gano'
GROUP BY nombre, apellido
ORDER BY tiempo
LIMIT 0 , 10

y esto parece que no se puede hacer:

SELECT nombre, apellido, min( tiempo )
FROM tabla
WHERE estado = 'gano'
GROUP BY nombre, apellido
ORDER BY min( tiempo )
LIMIT 0 , 10

keyboy 04-03-2008 20:01:00

Yo veo bien el orden.

Con esta tabla:

Código:

id  nombre  apellido tiempo  estado
1  juan    perez    10      gano
2  juan    perez    20      gano
3  juan    perez    20      perdio
4  pedro  juarez  40      gano
5  pedro  juarez  10      perdio
6  pedro  juarez  30      gano
7  luis    mendez  40      gano

y la consulta

Código SQL [-]
select nombre, apellido, min(tiempo)
from ejemplo
where estado = 'gano'
group by nombre, apellido
order by tiempo

obtengo estos registros

Código:

id  nombre  apellido tiempo  estado
1  juan    perez    10      gano
6  pedro  juarez  30      gano
7  luis    mendez  40      gano

¿Es correcto, no?

----------------------
Para recrear el ejemplo:

Código SQL [-]
create table if not exists ejemplo (
  id int(11) not null auto_increment,
  nombre varchar(45) not null default '',
  apellido varchar(45) not null default '',
  tiempo int(11) not null default '0',
  estado enum('perdio','gano') not null default 'perdio',
  primary key  (id)
);

insert into ejemplo (id, nombre, apellido, tiempo, estado) values
(1, 'juan', 'perez', 10, 'gano'),
(2, 'juan', 'perez', 20, 'gano'),
(3, 'juan', 'perez', 20, 'perdio'),
(4, 'pedro', 'juarez', 40, 'gano'),
(5, 'pedro', 'juarez', 10, 'perdio'),
(6, 'pedro', 'juarez', 30, 'gano'),
(7, 'luis', 'mendez', 40, 'gano');

Bye

neo83 04-03-2008 21:54:43

es raro... pero no me lo ordena... :S

neo83 05-03-2008 18:33:03

le agregue un par de datos mas a la tabla ejemplo

INSERT INTO `ejemplo` (`id`, `nombre`, `apellido`, `tiempo`, `estado`) VALUES
(1, 'juan', 'perez', 10, 'gano'),
(2, 'juan', 'perez', 20, 'gano'),
(3, 'juan', 'perez', 20, 'perdio'),
(4, 'pedro', 'juarez', 40, 'gano'),
(5, 'pedro', 'juarez', 10, 'perdio'),
(6, 'pedro', 'juarez', 30, 'gano'),
(7, 'luis', 'mendez', 40, 'gano'),
(8, 'juan', 'perez', 5, 'gano'),
(9, 'pedro', 'juarez', 8, 'gano'),
(10, 'luis', 'mendez', 3, 'gano');


y ahora no lo ordena:

juan perez 5
pedro juarez 8
luis mendez 3

Este es el Query:

SELECT nombre, apellido, min( tiempo )
FROM ejemplo
WHERE estado = 'gano'
GROUP BY nombre, apellido
ORDER BY tiempo
LIMIT 0 , 30

keyboy 05-03-2008 19:41:58

Ya veo.

Intenta así:

Código SQL [-]
select nombre, apellido, min(tiempo) as tiempo_min
from ejemplo
where estado = 'gano'
group by nombre, apellido
order by tiempo_min

Bye

neo83 05-03-2008 20:45:56

Excelente!!! Ahora si funciona bien!!!
Muchas gracias a todos los que contestaron!!!


La franja horaria es GMT +2. Ahora son las 05:46:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi