sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgresql SELECT aleatorio con valor único

¿Se puede reformular su pregunta como:

"Para cada uno de los diez proveedores seleccionados al azar, encuentre una oferta seleccionada al azar ofrecida por ese proveedor" ?

Si es así, eso prácticamente te dice qué hacer. Necesita dos capas, una pasada para seleccionar al azar diez proveedores, luego una pasada para seleccionar una oferta aleatoria por proveedor.

Dados datos ficticios:

create table spam ( deal text, provider text );

insert into spam(deal,provider) 
SELECT prov_id||n::text, prov_id FROM (
    SELECT chr(x) AS prov_id from  generate_series(97, 92+26) x) y 
CROSS JOIN generate_series(1,10) n;

select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10;

Aquí hay uno que funciona:

SELECT
 (SELECT deal FROM spam WHERE spam.provider = sel_prov.provider ORDER BY random() LIMIT 1),
 sel_prov.provider
FROM (select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10) sel_prov;

... más o menos simplemente implementando la redacción anterior como SQL. No sé si es rápido; entiendes la idea.

Si la reformulación anterior no es correcta, aclare su pregunta con datos de muestra y un ejemplo, o algún detalle más en su descripción.