Heim >Datenbank >MySQL-Tutorial >Wie gruppiert man aufeinanderfolgende Jahre nach einzelnen Unternehmen und Berufen in PostgreSQL?

Wie gruppiert man aufeinanderfolgende Jahre nach einzelnen Unternehmen und Berufen in PostgreSQL?

DDD
DDDOriginal
2025-01-09 13:36:411040Durchsuche

How to Group Consecutive Years for Unique Companies and Professions in PostgreSQL?

Gruppieren Sie aufeinanderfolgende Jahre in PostgreSQL 9.0

In diesem Artikel wird erläutert, wie Sie aufeinanderfolgende Jahre in PostgreSQL 9.0 gruppieren und gleichzeitig eindeutige Unternehmens- und Berufsinformationen erhalten.

Um dieses Ziel zu erreichen, werden wir einen mehrstufigen Ansatz verfolgen. Zuerst identifizieren wir nicht aufeinanderfolgende Jahre mithilfe einer Unterabfrage, die einen „group_cnt“-Wert zuweist, basierend darauf, ob das Jahr das erste in der Sequenz ist oder ob die Differenz zwischen dem aktuellen Jahr und dem vorherigen Jahr größer als 1 ist.

Als nächstes definieren wir die Gruppen-ID, indem wir die group_cnt-Werte für die sortierten Jahre für jedes Unternehmen und jeden Beruf summieren. Dadurch werden aufeinanderfolgende Gruppen für nicht aufeinanderfolgende Jahre erstellt.

Schließlich nutzen wir eine weitere abgeleitete Tabelle, um Jahre basierend auf der Gruppen-ID zu aggregieren. Das Ergebnis ist eine Reihe von Jahren für jedes einzelne Unternehmen und jeden einzelnen Beruf, wobei aufeinanderfolgende Jahre gruppiert werden.

Beispielabfrage:

<code class="language-sql">SELECT company,
       profession,
       array_agg(year) AS years
FROM (
  SELECT company,
         profession,
         year,
         SUM(group_cnt) OVER (ORDER BY company, profession, year) AS group_nr
  FROM ( 
    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
  ) t1
) t2
GROUP BY company, profession, group_nr
ORDER BY company, profession, group_nr;</code>

Ausgabe:

<code> company | profession |      years
---------+------------+------------------
 Google  | Programmer | {2000}
 Google  | Sales      | {2000,2001,2002}
 Google  | Sales      | {2004}
 Mozilla | Sales      | {2002}
(4 rows)</code>

Das obige ist der detaillierte Inhalt vonWie gruppiert man aufeinanderfolgende Jahre nach einzelnen Unternehmen und Berufen in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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