Re: registros aleatorios con al menos de una categoría

From: Francisco Olarte <folarte(at)peoplecall(dot)com>
To: Eduardo Arenas <edomax(at)gmail(dot)com>
Cc: Hellmuth Vargas <hivs77(at)gmail(dot)com>, Lista Postgres ES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: registros aleatorios con al menos de una categoría
Date: 2019-05-15 10:01:12
Message-ID: CA+bJJbwEODVR8eTPWLzu0xM+ezJMZTkKs7HT+O3BAjwgMQHL3Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Eduardo:

On Tue, May 14, 2019 at 8:20 PM Eduardo Arenas <edomax(at)gmail(dot)com> wrote:
> Ahí va el experimento con 1 millón de registros, y comprobación con una windows función de que el procedimiento entrega igual cantidad de días de la semana aprox en la muestra.

Nadie duda que puedas hacer un query que genere un numero aleatorio, y
una cantidad igual de dias de la semana, pero ...pero.....

> drop table if exists random_semana;
> create temp table random_semana as
> with consulta as (
> select generate_series(1,1000000) as q
> )
> select q,trunc(ran) as ran
> from
> (
> select *
> ,random()*7+1 as ran
> from consulta
> ) as a;

Ese query parece hecho a posta pa confundir a alguien en una pregunta
de examen, ¿ porque un CTE y un select anidado en lugar de dos del
mismo tipo ?
Eso parece generar sin mas una lista numerada de 1 millon de numeros
aleatorios de 1 a 7...

> select *,count(*) over (partition by ran) from random_semana order by 1;

Y esto parece que los cuenta. No se que tiene que ver esto con el
sacar una muestra aleatoria con unas caracteristicas dadas. Si lo que
pretende es probar que el generador de aleatorios no es
espectacularmente malo, parece correcto. Ahora bien, si cambias el
limite de un millon a siete, por aquello de que sea divisible por 7,
repites el experimento 100 veces, p.e., y en todas te salen 1 millon
de cada clase yo me preocuparia ( por hacer experimentos estadisticos
que tampoco solucionan el problema pero son algo mas truculentos ).

> PS… Hay cosas que se puede resolver discutiendo, y otras q se puede resolver haciendo el experimento… esta es una de ellas. La documentación de un sistema es el código funcionando, que es lo que hace funcionar al sistemas, el resto es música!.

Aqui no se discutia mucho, pero bueno. Dejando aparte que no se que
intenta probar ese query, hay cosas que hay que mirar antes. Una
solucion probabilistica puede ser suficientemente buena para lo que se
quiere, pero hay que tener aprobacion de que lo es. Una seleccion
aleatoria de muestras funcionando un millon de veces no te garantiza
que funcione a la siguiente, lo sabes de sobra. Es como el tipico
problema de "quiero mandar el user ID pero que no se vea que viene de
un serial, voy a mandar el <insert favorite hash function>". Eso puede
colisionar ( si no demuestras primero que tu funcion de hash no tiene
colisiones en el dominio de los user id ), por lo que hay que usar una
funcion de encriptacion. Puedes generar trillones de user ids y no
tener colisiones, pero necesitas una funcion invertible para
garantizar que no las tienes. O puedes decirle al jefe que vas a usar
un codigo mas simple y barato, que lo has probado unas cuantos
millones de veces, y que la probabilidad de colision es tan baja que
no justifica el coste de hacer uno correcto.

Francisco Olarte.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Eduardo Arenas 2019-05-15 11:03:06 Re: registros aleatorios con al menos de una categoría
Previous Message Alvaro Herrera 2019-05-14 18:36:13 Re: registros aleatorios con al menos de una categoría