Suche…


Einfache Statistik: min (), max (), avg ()

Um einige einfache Statistiken eines Werts in einer Tabellenspalte zu ermitteln, können Sie eine Aggregatfunktion verwenden.

Wenn Ihre individuals ist:

Name Alter
Allie 17
Amanda 14
Alana 20

Sie können diese Anweisung schreiben, um den Minimal-, Maximal- und Durchschnittswert zu erhalten:

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

Ergebnis:

Mindest max Durchschn
14 20 17

string_agg (Ausdruck, Trennzeichen)

Sie können Zeichenfolgen, die durch Trennzeichen getrennt sind, mithilfe der Funktion string_agg() verketten.

Wenn Ihre individuals ist:

Name Alter Land
Allie fünfzehn Vereinigte Staaten von Amerika
Amanda 14 Vereinigte Staaten von Amerika
Alana 20 Russland

Sie könnten eine SELECT ... GROUP BY Anweisung schreiben, um Namen aus jedem Land zu erhalten:

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

Beachten Sie, dass Sie eine GROUP BY Klausel verwenden müssen, da string_agg() eine Aggregatfunktion ist.

Ergebnis:

Namen Land
Allie, Amanda Vereinigte Staaten von Amerika
Alana Russland

Weitere hier beschriebene PostgreSQL-Aggregatfunktion

regr_slope (Y, X): Steigung der linearen Gleichung für die Anpassung der kleinsten Quadrate, bestimmt durch die (X, Y) -Paare

Um die Verwendung von regr_slope (Y, X) zu veranschaulichen, habe ich es auf ein Problem der realen Welt angewendet. Wenn Sie in Java den Speicher nicht ordnungsgemäß bereinigen, kann der Müll hängen bleiben und den Speicher füllen. Sie legen jede Stunde Statistiken über die Speicherauslastung verschiedener Klassen ab und laden sie zur Analyse in eine Postgres-Datenbank.

Alle Speicherverlustkandidaten tendieren dazu, mehr Speicher zu verbrauchen, wenn mehr Zeit vergeht. Wenn Sie diesen Trend darstellen, können Sie sich eine Linie nach links und links vorstellen:

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

Angenommen, Sie haben eine Tabelle mit Heap-Dump-Histogrammdaten (eine Zuordnung von Klassen zu ihrem Speicherbedarf):

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

Um die Steigung für jede Klasse zu berechnen, gruppieren wir die Klasse über. Die HAVING-Klausel> 0 stellt sicher, dass nur Kandidaten mit einem positiven Slop (eine Linie nach oben und nach links) angezeigt werden. Wir sortieren nach der Steigung absteigend, sodass die Klassen mit der höchsten Speicherzuwachsrate an der Spitze angezeigt werden.

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

Ausgabe:

         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

Die Ausgabe zeigt, dass der Speicherverbrauch von java.util.ArrayList mit 71.799 Bytes pro Sekunde am schnellsten ansteigt und möglicherweise Teil des Speicherverlusts ist.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow