Sök…


Enkel statistik: min (), max (), avg ()

För att bestämma enkel statistik över ett värde i en kolumn i en tabell kan du använda en aggregerad funktion.

Om din individuals tabell är:

namn Ålder
Allie 17
Amanda 14
Alana 20

Du kan skriva detta uttalande för att få minimi-, max- och medelvärdet:

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

Resultat:

min max avg
14 20 17

string_agg (uttryck, avgränsare)

Du kan sammanfoga strängar separerade med avgränsare med string_agg() .

Om din individuals tabell är:

namn Ålder Land
Allie 15 USA
Amanda 14 USA
Alana 20 ryssland

Du kan skriva SELECT ... GROUP BY uttalande för att få namn från varje land:

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

Observera att du måste använda en GROUP BY klausul eftersom string_agg() är en sammanlagd funktion.

Resultat:

namn Land
Allie, Amanda USA
Alana ryssland

Mer PostgreSQL sammanlagd funktion beskrivs här

regr_slope (Y, X): lutningen för den linjära ekvationen med minst kvadrat-passande bestämd av (X, Y) -par

För att illustrera hur man använder regr_slope (Y, X) använde jag det på ett verkligt problem. Om du inte städar in minnet i Java kan papperskorgen fastna och fylla i minnet. Du dumpar statistik varje timme om minnesanvändning av olika klasser och laddar den i en postgres-databas för analys.

Alla kandidater för minnesläckage kommer att ha en trend att konsumera mer minne i takt med att mer tid går. Om du planerar denna trend skulle du föreställa dig att en linje går upp och till vänster:

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

Anta att du har en tabell som innehåller heap dump histogramdata (en kartläggning av klasser till hur mycket minne de förbrukar):

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

För att beräkna sluttningen för varje klass, grupperar vi efter över klassen. HAVING-klausulen> 0 säkerställer att vi bara får kandidater med en positiv lutning (en linje som går upp och till vänster). Vi sorterar efter lutningen som faller ned så att vi får klasserna med den största minneshastigheten överst.

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

Produktion:

         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

Från utgången ser vi att java.util.ArrayLists minneskonsumtion ökar snabbast med 71,799 byte per sekund och är potentiellt en del av minnesläckan.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow