postgresql
Samlade funktioner
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.