Agrupamiento (group by - hashtable)

From: Rolando Sabatino <rjsabatino(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Agrupamiento (group by - hashtable)
Date: 2011-08-02 02:03:04
Message-ID: CALtNgj3aeFj2iTU56K1rHgYQfB1MOCSXH9jPKWz6a3k3Cs3u1g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos. Es primera vez que escribo en la lista y espero que esta sea la
correcta para este tipo de cosas. Si no es así disculpen.

Mi problema es el siguiente: Para mi trabajo de grado estoy implementando
sobre PostgreSQL ciertas extensiones para el soporte de consultas difusas (o
flexibles), en específico consultas con cuantificadores difusos y
agrupamiento difuso, actualmente tengo problemas en como voy a diseñar la
implementación del agrupamiento debido a lo siguiente:

Para este Agrupamiento Difuso me estoy basando en el trabajo de Patrick Bosc
y Olivier Pivert "On a Fuzzy Group-by Clause in SQLf" en el cual se plantea
una estructura de consulta de este tipo:

SELECT label(A), [,aggregate, ...] FROM r [WHERE y]
GROUP BY label(A)
USING p(A) = {L1, ... , Ln}

Donde p(A) es una partición definida sobre el dominio de A, label(A) denota
cualquier etiqueta Li de p(A), e y es una condición que puede ser booleana o
difusa.

Un ejemplo de una consulta de este tipo: Supongamos que tenemos una tabla
Emp (id, name, age, salary) que tiene información sobre los empleados de una
empresa, y queremos obtener el promedio del salario de los empleados
agrupados por clase de edad (ventiañeros, treintañeros etc...).

SELECT label(age), AVG(salary) FROM Emp
GROUP BY label(age)
USING p(A) = {[20, 29], [30, 39], [40, 49], [50, 59], [60, 69]}

Tambien, sería posible que estas particiones sean difusas, osea conjuntos
difusos de esta forma:

USING p(A) = {young, middle-age, old}

Estos conjuntos difusos estarían representados de forma trapezoidal.

Ahora, el problema es el siguiente, estos conjuntos (difusos o no) pueden
solaparse, es decir que una tupla pudiera estar en 2 (o mas, pero vamos a
restringirlo a 2) grupos al mismo tiempo, sin embargo, me di cuenta que en
Postgre no es posible lograr esto ya que cuando se usa group by se va
llenando una tabla de hash para construir los grupos, y por la teoría que
se, una tabla de hash no permite que un elemento este asociado con mas de un
registro al mismo tiempo, por lo tanto que podría hacer para solucionar este
inconveniente?

Espero me puedan ayudar, Gracias.

--
Rolando Sabatino

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2011-08-02 02:18:11 Re: Agrupamiento (group by - hashtable)
Previous Message Alvaro Herrera 2011-08-02 01:31:27 Re: listado complejo...o engorroso