Heim > Datenbank > MySQL-Tutorial > Wie gruppiert und aggregiert man aufeinanderfolgende numerische Werte in PostgreSQL mithilfe von GROUP BY?

Wie gruppiert und aggregiert man aufeinanderfolgende numerische Werte in PostgreSQL mithilfe von GROUP BY?

Susan Sarandon
Freigeben: 2025-01-09 13:31:41
Original
567 Leute haben es durchsucht

So verwenden Sie GROUP BY, um kontinuierliche Werte in PostgreSQL zu aggregieren

How to Group and Aggregate Consecutive Numeric Values in PostgreSQL Using GROUP BY?

PostgreSQL 9.0 und höher kann mithilfe der GROUP BY-Klausel aufeinanderfolgende numerische Werte in einem bestimmten Feld aggregieren. Die folgende Abfrage zeigt, wie dies in einer Tabelle erreicht wird, die die Felder „Firma“, „Beruf“ und „Jahr“ enthält:

Schritt 1: Identifizieren Sie nicht kontinuierliche Werte

<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>
Nach dem Login kopieren

Diese Abfrage weist jeder Zeile eine Gruppenanzahl (group_cnt) zu, basierend darauf, ob die Jahre aufeinander folgen. Eine Zeile mit group_cnt 1 zeigt den Beginn einer neuen Gruppe an.

Schritt 2: Gruppen-ID definieren

<code class="language-sql">-- 步骤二:定义分组 ID
SELECT
  company,
  profession,
  year,
  SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr
FROM qualification
WHERE group_cnt = 1;</code>
Nach dem Login kopieren

Diese Abfrage weist jeder Gruppe eine Gruppennummer (group_nr) zu. Jedes aufeinanderfolgende Jahr gehört derselben Gruppe an.

Schritt 3: Aufeinanderfolgende Jahre zusammenfassen

<code class="language-sql">-- 步骤三:聚合连续年份
SELECT
  company,
  profession,
  ARRAY_AGG(year) AS years
FROM qualification
WHERE group_cnt <> 0
GROUP BY
  company,
  profession,
  group_nr
ORDER BY
  company,
  profession,
  group_nr;</code>
Nach dem Login kopieren

Diese letzte Abfrage fasst aufeinanderfolgende Jahre in einem Array zusammen und filtert nicht aufeinanderfolgende Zeilen heraus. Die Ergebnisse sind nach Unternehmen und Beruf gruppiert.

Indem Sie die oben genannten drei Schritte befolgen, können Sie kontinuierliche Werte in PostgreSQL effektiv aggregieren. Beachten Sie, dass qualification Tabelle durch Ihren tatsächlichen Tabellennamen ersetzt werden sollte.

Das obige ist der detaillierte Inhalt vonWie gruppiert und aggregiert man aufeinanderfolgende numerische Werte in PostgreSQL mithilfe von GROUP BY?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage