Buscar..


Estadísticas simples: min (), max (), avg ()

Para determinar algunas estadísticas simples de un valor en una columna de una tabla, puede usar una función agregada.

Si su tabla de individuals es:

Nombre Años
Allie 17
Amanda 14
Alana 20

Podría escribir esta declaración para obtener el valor mínimo, máximo y promedio:

SELECT min(age), max(age), avg(age)
FROM individuals;

Resultado:

min max avg
14 20 17

string_agg (expresión, delimitador)

Puede concatenar cadenas separadas por delimitador utilizando la función string_agg() .

Si su tabla de individuals es:

Nombre Años País
Allie 15 Estados Unidos
Amanda 14 Estados Unidos
Alana 20 Rusia

Puede escribir la SELECT ... GROUP BY para obtener nombres de cada país:

SELECT string_agg(name, ', ') AS names, country 
FROM individuals 
GROUP BY country;

Tenga en cuenta que necesita usar una cláusula GROUP BY porque string_agg() es una función agregada.

Resultado:

nombres país
Allie amanda Estados Unidos
Alana Rusia

Más función agregada de PostgreSQL descrita aquí

regr_slope (Y, X): pendiente de la ecuación lineal de ajuste por mínimos cuadrados determinada por los pares (X, Y)

Para ilustrar cómo usar regr_slope (Y, X), lo apliqué a un problema del mundo real. En Java, si no limpia la memoria correctamente, la basura se puede atascar y llenar la memoria. Vuelca estadísticas cada hora sobre la utilización de la memoria de diferentes clases y la carga en una base de datos de Postgres para su análisis.

Todos los candidatos a pérdida de memoria tendrán una tendencia a consumir más memoria a medida que pase más tiempo. Si trazas esta tendencia, te imaginas una línea que va hacia arriba y hacia la izquierda:

    ^
    |
s   |  Legend:
i   |  *  - data point
z   |  -- - trend
e   |
(   |
b   |                 *
y   |                     --
t   |                  --
e   |             * --    *
s   |           --
)   |       *--      *
    |     --    *
    |  -- *
   --------------------------------------->
                      time

Supongamos que tiene una tabla que contiene datos de histograma de volcado de pila (una asignación de clases a la cantidad de memoria que consumen):

CREATE TABLE heap_histogram (
    -- when the heap histogram was taken
    histwhen timestamp without time zone NOT NULL, 
    -- the object type bytes are referring to
    -- ex: java.util.String
    class character varying NOT NULL,
    -- the size in bytes used by the above class
    bytes integer NOT NULL
);

Para calcular la pendiente de cada clase, agrupamos por sobre la clase. La cláusula HAVING> 0 garantiza que solo obtengamos candidatos con una pendiente positiva (una línea que va hacia arriba y hacia la izquierda). Clasificamos por la pendiente descendente para obtener las clases con la mayor tasa de aumento de memoria en la parte superior.

-- epoch returns seconds
SELECT class, REGR_SLOPE(bytes,extract(epoch from histwhen)) as slope
    FROM public.heap_histogram
    GROUP BY class
    HAVING REGR_SLOPE(bytes,extract(epoch from histwhen)) > 0
    ORDER BY slope DESC ;

Salida:

         class             |        slope         
---------------------------+----------------------
 java.util.ArrayList       |     71.7993806279174
 java.util.HashMap         |     49.0324576155785
 java.lang.String          |     31.7770770326123
 joe.schmoe.BusinessObject |     23.2036817108056
 java.lang.ThreadLocal     |     20.9013528767851

Desde la salida, vemos que el consumo de memoria de java.util.ArrayList está aumentando más rápidamente a 71.799 bytes por segundo y es potencialmente parte de la pérdida de memoria.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow