Szukaj…


Proste statystyki: min (), max (), avg ()

Aby ustalić proste statystyki wartości w kolumnie tabeli, możesz użyć funkcji agregującej.

Jeśli individuals tabela:

Nazwa Wiek
Allie 17
Amanda 14
Alana 20

Możesz napisać to oświadczenie, aby uzyskać minimalną, maksymalną i średnią wartość:

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

Wynik:

min max śr
14 20 17

string_agg (wyrażenie, separator)

Możesz łączyć łańcuchy rozdzielone separatorem za pomocą funkcji string_agg() .

Jeśli individuals tabela:

Nazwa Wiek Kraj
Allie 15 USA
Amanda 14 USA
Alana 20 Rosja

Możesz napisać SELECT ... GROUP BY , aby uzyskać nazwy z każdego kraju:

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

Pamiętaj, że musisz użyć klauzuli GROUP BY , ponieważ string_agg() jest funkcją agregującą.

Wynik:

nazwy kraj
Allie, Amanda USA
Alana Rosja

Więcej funkcji agregujących PostgreSQL opisanych tutaj

regr_slope (Y, X): nachylenie równania liniowego o najmniejszych kwadratach, określone przez pary (X, Y)

Aby zilustrować, jak używać regr_slope (Y, X), zastosowałem go do problemu w świecie rzeczywistym. W Javie, jeśli nie wyczyścisz poprawnie pamięci, śmieci mogą utknąć i wypełnić pamięć. Co godzinę zrzucasz statystyki dotyczące wykorzystania pamięci przez różne klasy i ładujesz je do bazy danych Postgres w celu analizy.

Wszyscy kandydaci na wyciek pamięci będą mieli tendencję do zużywania większej ilości pamięci w miarę upływu czasu. Jeśli wykreślisz ten trend, wyobraź sobie linię idącą w górę i w lewo:

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

Załóżmy, że masz tabelę zawierającą dane histogramu zrzutu stosu (odwzorowanie klas na zużycie pamięci):

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
);

Aby obliczyć nachylenie dla każdej klasy, grupujemy według klas. Klauzula HAVING> 0 zapewnia, że otrzymujemy tylko kandydatów z dodatnim nachyleniem (linia w górę i w lewo). Sortujemy według nachylenia malejącego, aby uzyskać klasy o największym tempie wzrostu pamięci na górze.

-- 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 ;

Wynik:

         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

Z danych wyjściowych wynika, że zużycie pamięci java.util.ArrayList rośnie najszybciej (71,799 bajtów na sekundę) i potencjalnie jest częścią wycieku pamięci.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow