Heim >Datenbank >MySQL-Tutorial >Wie gruppiere ich aufeinanderfolgende numerische Werte in PostgreSQL mithilfe von GROUP BY?
Verwenden von PostgreSQLs GROUP BY zum Aggregieren aufeinanderfolgender Zahlen
PostgreSQL bietet leistungsstarke Funktionen zur Datenaggregation. Dieser Leitfaden zeigt, wie man aufeinanderfolgende numerische Werte mithilfe der GROUP BY
-Klausel gruppiert, wobei der Schwerpunkt insbesondere auf Szenarien mit aufeinanderfolgenden Jahren liegt.
Beispielszenario: Gruppierung von Jahren nach Unternehmen und Beruf
Stellen Sie sich eine Tabelle mit dem Namen qualification
mit den Spalten company
, profession
und year
vor. Ziel ist es, einzigartige Unternehmens-Berufs-Kombinationen zu identifizieren und ihre aufeinanderfolgenden Jahre in Arrays zu gruppieren.
Schritt-für-Schritt-Lösung:
<code class="language-sql">SELECT company, profession, year, CASE WHEN ROW_NUMBER() OVER (PARTITION BY company, profession ORDER BY year) = 1 OR year - LAG(year, 1, year) OVER (PARTITION BY company, profession ORDER BY year) > 1 THEN 1 ELSE 0 END AS group_cnt FROM qualification;</code>
Diese Abfrage verwendet ROW_NUMBER()
, um innerhalb jeder Unternehmens-Berufsgruppe einen eindeutigen Rang zuzuweisen, und LAG()
, um das aktuelle Jahr mit dem Vorjahr zu vergleichen. group_cnt
kennzeichnet nicht aufeinanderfolgende Jahre mit einem 1
.
<code class="language-sql">SELECT company, profession, year, SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr FROM ( -- The query from Step 1 goes here ) t1;</code>
Die Fensterfunktion SUM() OVER()
summiert die group_cnt
-Werte kumulativ und erstellt so eine laufende Summe, die als Gruppen-ID (group_nr
) dient.
array_agg()
, um die Jahre innerhalb jeder Gruppe zu aggregieren:<code class="language-sql">SELECT company, profession, ARRAY_AGG(year) AS years FROM ( -- The query from Step 2 goes here ) t2 GROUP BY company, profession, group_nr ORDER BY company, profession, group_nr;</code>
Diese Abfrage gruppiert die Ergebnisse nach company
, profession
und group_nr
, wobei ARRAY_AGG()
verwendet wird, um die Jahre in Arrays für jede Gruppe zu kombinieren.
Erwartete Ausgabe: Die endgültige Ausgabe gruppiert aufeinanderfolgende Jahre in Arrays:
<code> company | profession | years ---------+------------+------------------ Google | Programmer | {2000} Google | Sales | {2000,2001,2002} Google | Sales | {2004} Mozilla | Sales | {2002} (4 rows)</code>
Diese Methode verwaltet effizient die Gruppierung aufeinanderfolgender numerischer Werte und bietet eine klare und präzise Lösung für die Datenanalyse in PostgreSQL.
Das obige ist der detaillierte Inhalt vonWie gruppiere ich aufeinanderfolgende numerische Werte in PostgreSQL mithilfe von GROUP BY?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!