Zoeken…


Eenvoudige statistieken: min (), max (), avg ()

Om enkele eenvoudige statistieken van een waarde in een kolom in een tabel te bepalen, kunt u een aggregatiefunctie gebruiken.

Als uw individuals tabel is:

Naam Leeftijd
Allie 17
Amanda 14
Alana 20

U kunt deze verklaring schrijven om de minimale, maximale en gemiddelde waarde te krijgen:

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

Resultaat:

min max avg
14 20 17

string_agg (expressie, scheidingsteken)

U kunt tekenreeksen gescheiden door scheidingstekens samenvoegen met de functie string_agg() .

Als uw individuals tabel is:

Naam Leeftijd land
Allie 15 Verenigde Staten van Amerika
Amanda 14 Verenigde Staten van Amerika
Alana 20 Rusland

U kunt de SELECT ... GROUP BY instructie schrijven om namen uit elk land te krijgen:

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

Merk op dat u een GROUP BY component moet gebruiken, omdat string_agg() een aggregatiefunctie is.

Resultaat:

namen land
Allie, Amanda Verenigde Staten van Amerika
Alana Rusland

Meer PostgreSQL-aggregatiefunctie die hier wordt beschreven

regr_slope (Y, X): helling van de lineaire vergelijking met de kleinste kwadraten-fit bepaald door de (X, Y) -paren

Om te illustreren hoe regr_slope (Y, X) te gebruiken, paste ik het toe op een echt probleem. Als je in Java het geheugen niet goed opruimt, kan het afval vastlopen en het geheugen vullen. U dumpt elk uur statistieken over geheugengebruik van verschillende klassen en laadt deze in een postgres-database voor analyse.

Alle kandidaten voor geheugenlekken zullen de trend hebben om meer geheugen te gebruiken naarmate er meer tijd verstrijkt. Als je deze trend plot, zou je je een lijn voorstellen die omhoog en naar links gaat:

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

Stel dat u een tabel hebt met heap dump histogramgegevens (een toewijzing van klassen aan hoeveel geheugen ze verbruiken):

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

Om de helling voor elke klasse te berekenen, groeperen we over de klasse. De HAVING-clausule> 0 zorgt ervoor dat we alleen kandidaten krijgen met een positieve slop (een lijn omhoog en naar links). We sorteren op de aflopende helling, zodat we de klassen met de grootste geheugengroei bovenaan krijgen.

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

Output:

         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

Uit de output zien we dat het geheugenverbruik van java.util.ArrayList het snelst toeneemt met 71.799 bytes per seconde en mogelijk deel uitmaakt van het geheugenlek.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow