postgresql
Verzamelde functies
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.