Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/03/2008, 11:24
seyko
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Re: Ordenar por número de coincidencias

Hice unas pruebas:


drop table producto;
create table producto (id serial primary key, nombre varchar);
insert into producto (nombre) values ('Apple Macbook Pro');
insert into producto (nombre) values ('Apple Macbook');
insert into producto (nombre) values ('Apple iPod');
insert into producto (nombre) values ('Dell XPS M1330');
drop table key;
create table key (id integer references producto(id), key varchar);
insert into key(key, id) values ('Apple', 1);
insert into key(key, id) values ('Apple', 2);
insert into key(key, id) values ('Apple', 3);
insert into key(key, id) values ('Macbook', 1);
insert into key(key, id) values ('Macbook', 2);
insert into key(key, id) values ('Pro', 1);
insert into key(key, id) values ('iPod', 3);
insert into key(key, id) values ('Dell', 4);
insert into key(key, id) values ('XPS', 4);
insert into key(key, id) values ('M1330', 4);

select nombre, count(distinct key)
from producto
join key using(id)
where key IN ('Apple', 'Macbook', 'Pro')
group by nombre
order by count(distinct key) desc

select nombre, count(distinct key)
from producto
join key using(id)
where key IN ('Apple', 'iPod')
group by nombre
order by count(distinct key) desc


Con estas select te da los resultados que esperas!

Espero que te sirva pero dudo que sea eficiente cuando las tablas crezcan.

Meter indices en las FK ayudará un poco.

Saludos