Beispiele für die Verwendung erweiterter Aggregatfunktionen von Postgresql (sehr detailliert)

PostgreSQL ist ein leistungsstarkes Open-Source-SQL-Datenbankverwaltungssystem, das zahlreiche Aggregationsfunktionen für die Datenanalyse und -berechnung bietet. Erweiterte Aggregatfunktionen sind eine sehr leistungsstarke Aggregatfunktion in PostgreSQL, mit der einige erweiterte Datenberechnungen auf benutzerdefinierte Weise durchgeführt werden können, z. B. die Berechnung von Durchschnittswerten, kumulativen Werten oder anderen komplexen zusammenfassenden Werten gemäß einem bestimmten Index oder einer bestimmten Bedingung.

Lassen Sie uns anhand eines Beispiels demonstrieren, wie die erweiterten Aggregatfunktionen in PostgreSQL verwendet werden.

Angenommen, es gibt eine Verkaufstabelle, in der Verkaufsdaten, einschließlich Verkäufe, Bestellzeit und andere Informationen, gespeichert sind. Die Tabellenstruktur und die Daten lauten wie folgt:

Kopieren

CREATE TABLE sales(
  id SERIAL PRIMARY KEY,
  amount NUMERIC(12, 2),
  order_date DATE
);

INSERT INTO sales(amount, order_date) VALUES
  (100.50, '2022-01-01'),
  (200.45, '2022-01-01'),
  (300.20, '2022-01-02'),
  (400.10, '2022-01-02'),
  (500.75, '2022-01-03'),
  (600.20, '2022-01-04'),
  (700.50, '2022-01-04'),
  (800.00, '2022-01-05'),
  (900.30, '2022-01-05'),
  (1000.00, '2022-01-05');

Angenommen, Sie müssen die kumulierten Verkäufe für jedes Datum und den Durchschnitt der Verkäufe für jedes Datum berechnen.

Erstens können wir erweiterte Aggregatfunktionen verwenden, ordered_set()um den kumulierten Umsatz zu berechnen. Diese Funktion kann gemäß den angegebenen Sortierbedingungen (z. B. Datum) akkumuliert werden. Die Syntax lautet wie folgt:

Kopieren

SELECT 
  order_date, 
  sum(amount) AS total_sales, 
  ordered_set('sum', amount ASC) WITHIN GROUP (ORDER BY order_date) OVER (ORDER BY order_date) AS cumulative_sales
FROM sales
ORDER BY order_date;

Diese Abfrage ORDERED_SET()berechnet mithilfe einer Funktion die kumulierten Verkäufe für jedes Datum. Der erste Parameter der Funktion gibt die zu akkumulierende Aggregationsfunktion an, hier wird er sum()zur Berechnung des Gesamtumsatzes jedes Datums verwendet; der zweite Parameter gibt die Spalte und Richtung für die Sortierung an, hier wird in aufsteigender Reihenfolge des Datums sortiert.

Die Abfrageergebnisse lauten wie folgt:

Kopieren

 order_date | total_sales | cumulative_sales
------------+-------------+-----------------
 2022-01-01 |      300.95 |           300.95
 2022-01-01 |      300.95 |           300.95
 2022-01-02 |      700.30 |          1001.25
 2022-01-02 |      700.30 |          1001.25
 2022-01-03 |      500.75 |          1502.00
 2022-01-04 |     1300.70 |          2802.70
 2022-01-04 |     1300.70 |          2802.70
 2022-01-05 |     2700.30 |          5503.00
 2022-01-05 |     2700.30 |          5503.00
 2022-01-05 |     2700.30 |          5503.00
(10 rows)

Es ist ersichtlich, dass die Berechnung der kumulierten Verkäufe im Ergebnis korrekt ist und der kumulierte Wert jedes Datums die Summe der vorherigen Tage plus die Verkäufe des aktuellen Datums ist.

Als Nächstes können wir eine weitere erweiterte Aggregationsfunktion verwenden, mode()um die durchschnittlichen Verkäufe für jedes Datum zu berechnen. Diese Funktion kann Indikatoren wie Modus, Median oder Mittelwert entsprechend dem gegebenen Index oder der gegebenen Bedingung berechnen. Hier ist eine Beispielabfrage, die den Durchschnitt berechnet:

Kopieren

SELECT 
  order_date, 
  sum(amount) / count(DISTINCT order_date) AS avg_sales, 
  mode() WITHIN GROUP (ORDER BY amount ASC) OVER (PARTITION BY order_date) AS median_sales
FROM sales
GROUP BY order_date
ORDER BY order_date;

Diese Abfrage verwendet MODE()Funktionen zur Berechnung des Durchschnitts- und Medianumsatzes für jedes Datum. Die Funktion benötigt keine Argumente, da sie standardmäßig den Durchschnitt berechnet. Die Parameter der Funktion WITHIN GROUPgeben an, wie die Berechnung durchgeführt werden soll, hier nach Betrag aufsteigend sortiert.

Diese Abfrage verwendet außerdem GROUP BYKlauseln und DISTINCTOperatoren, um sicherzustellen, dass jedes Datum bei der Berechnung des Durchschnitts nur einmal gezählt wird. Am Ende wird auch eine Klausel verwendet, ORDER BYum die Ergebnisse zu sortieren.

Die Abfrageergebnisse lauten wie folgt:

Kopieren

 order_date | avg_sales | median_sales
------------+-----------+--------------
 2022-01-01 | 150.47500 |       150.45
 2022-01-02 | 350.15000 |       350.20
 2022-01-03 | 500.75000 |       500.75
 2022-01-04 | 500.35000 |       650.35
 2022-01-05 | 900.10000 |       800.00
(5 rows)

Sie können sehen, dass die durchschnittlichen und mittleren Umsätze für jedes Datum in den Ergebnissen korrekt berechnet wurden. SUM()Für den Durchschnitt wird die Summenfunktion zur Berechnung verwendet COUNT()und dann geteilt, um den Durchschnitt zu erhalten; für den Median MODE()wird die Funktion zur Berechnung verwendet und in aufsteigender Reihenfolge der Beträge sortiert.

Auf diese Weise haben wir zwei erweiterte Aggregationsfunktionen verwendet, um einige erweiterte Zusammenfassungsmetriken zu berechnen. Mithilfe benutzerdefinierter Sortier- und Berechnungsmethoden können diese Funktionen verschiedene komplexe zusammenfassende Indikatoren berechnen, sodass wir Daten besser verstehen und analysieren können.

Ich denke du magst

Origin blog.csdn.net/qq_60870118/article/details/131242534
Empfohlen
Rangfolge