MySQL-Gleitaggregation/Jahresaggregation – Prinzip und Anwendungsbeispielanalyse

MySQL-Gleitaggregation/Jahresaggregation – Prinzip und Anwendungsbeispielanalyse

In diesem Artikel werden anhand von Beispielen die Prinzipien und die Verwendung der MySQL-Gleitaggregation/Year-to-Date-Aggregation veranschaulicht. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Bei der gleitenden Aggregation handelt es sich um eine Operation, bei der Daten innerhalb des gleitenden Fensterbereichs der Reihe nach aggregiert werden. Im Unterschied zur kumulativen Aggregation werden bei der gleitenden Aggregation die Daten nicht von der Startposition bis zur aktuellen Position gezählt.

Hier nehmen wir das Beispiel der Zählung der monatlichen Bestellungen von Mitarbeitern in den letzten drei Monaten, um eine gleitende Aggregation einzuführen.

Der Hauptunterschied zwischen den Lösungen der gleitenden Aggregation und der kumulativen Aggregation liegt in den unterschiedlichen Bedingungen für die Verbindung. Die gleitende Aggregationsbedingung lautet nicht mehr b.ordermonth <= a.ordermonth, sondern b.ordermonth ist größer als die Monate der letzten drei Monate und kleiner als der aktuelle Monat. Daher lautet die SQL-Anweisung für die gleitende Aggregationslösung wie folgt

WÄHLEN
 a.empid,
 DATE_FORMAT(a.Bestellmonat, '%Y-%m') AS Bestellmonat,
 a.qty AS diesen Monat,
 SUM(b.qty) AS Gesamtsumme,
 CAST(AVG(Menge) AS DECIMAL(5,2)) AS Durchschnitt
VON emordert ein
INNER JOIN emorders b
 EIN a.empid=b.empid
 UND b.Bestellmonat > DATE_ADD(a.Bestellmonat, INTERVALL -3 MONAT)
 UND b.Bestellmonat <= a.Bestellmonat
WO DATE_FORMAT(a.Bestellmonat,'%Y')='2015' UND DATE_FORMAT(b.Bestellmonat,'%Y')='2015'
GROUP BY a.empid,DATE_FORMAT(a.Bestellmonat, '%Y-%m'),a.Menge
BESTELLEN NACH a.empid,a.ordermonth

Die Ergebnisse sind wie folgt

Diese Lösung gibt eine gleitende Aggregation mit einem Zeitraum von drei Monaten zurück, aber jeder Benutzer schließt die Aggregation der vorherigen zwei Monate und weniger als drei Monate ein. Wenn Sie nur die Aggregate zurückgeben möchten, die älter als 3 Monate sind, aber nicht die Aggregate, die jünger als 3 Monate sind, können Sie den HAVING-Filter zum Filtern verwenden. Die Filterbedingung ist beispielsweise MIN(b.ordermonth)=DATE_ADD(a.ordermonth, INTERVAL -2 MONTH)

WÄHLEN
 a.empid,
 a.ordermonth AS Bestellmonat,
 a.qty AS diesen Monat,
 SUM(b.qty) AS Gesamtsumme,
 CAST(AVG(Menge) AS DECIMAL(5,2)) AS Durchschnitt
VON emordert ein
INNER JOIN emorders b
 EIN a.empid=b.empid
 UND b.Bestellmonat > DATE_ADD(a.Bestellmonat, INTERVALL -3 MONAT)
 UND b.Bestellmonat <= a.Bestellmonat
WO DATE_FORMAT(a.ordermonth,'%Y')='2015' UND DATE_FORMAT(b.ordermonth,'%Y')='2015' UND a.empid=1
GROUP BY a.empid,DATE_FORMAT(a.Bestellmonat, '%Y-%m'),a.Menge
HAVING MIN(b.Bestellmonat)=DATE_ADD(a.Bestellmonat, INTERVALL-2 MONAT)
BESTELLEN NACH a.empid,a.ordermonth

Die Ergebnisse sind wie folgt

Die Year-to-Date-Aggregation ähnelt der gleitenden Aggregation, mit dem Unterschied, dass nur die Aggregation für das aktuelle Jahr gezählt wird. Der einzige Unterschied besteht darin, wo die Untergrenze beginnt. Beim Year-to-Date-Problem ist die Untergrenze der erste Tag des Jahres, während die Untergrenze für die gleitende Aggregation der erste Tag von N Monaten ist. Daher wird unten die Lösung für das Year-to-Date-Problem gezeigt, und die erzielten Ergebnisse

WÄHLEN
 a.empid,
 DATE_FORMAT(a.Bestellmonat, '%Y-%m') AS Bestellmonat,
 a.qty AS diesen Monat,
 SUM(b.qty) AS Gesamtsumme,
 CAST(AVG(Menge) AS DECIMAL(5,2)) AS Durchschnitt
VON emordert ein
INNER JOIN emorders b
  EIN a.empid=b.empid
  UND b.Bestellmonat >= DATE_FORMAT(a.Bestellmonat, '%Y-01-01')
  UND b.Bestellmonat <= a.Bestellmonat
  UND DATE_FORMAT(b.Bestellmonat,'%Y')='2015'
GRUPPE NACH a.empid,a.ordermonth,a.qty
BESTELLEN NACH a.empid,a.ordermonth

Die Ergebnisse sind wie folgt

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Nutzungs- und Leistungsoptimierungstechniken für die Aggregatfunktion „count“ in MySQL
  • Detaillierte Erläuterung der häufig verwendeten MySQL-Aggregatfunktionen
  • So fügen Sie bedingte Ausdrücke zu Aggregatfunktionen in MySql hinzu
  • php+mysql Open Source XNA-Aggregationsprogramm zum Download freigegeben
  • Mysql kann keine nicht aggregierten Spalten auswählen
  • Analyse der Verwendung von MySQL-Abfragesortierung und Abfrageaggregationsfunktionen
  • Detaillierte Erläuterung von Beispielen für MySQL-Einzeltabellenabfragevorgänge [Syntax, Einschränkungen, Gruppierung, Aggregation, Filterung, Sortierung usw.]
  • Analyse des Prinzips und der Verwendung der kontinuierlichen MySQL-Aggregation
  • Analyse des kumulativen Aggregationsprinzips von MySQL und Anwendungsbeispiele

<<:  Detaillierte Erläuterung des Problems, dass der Speicherplatz nach dem Löschen der Linux-Datei nicht freigegeben wird

>>:  JavaScript MouseEvent-Fallstudie

Artikel empfehlen

Wachstumserfahrung eines Webdesigners

<br />Vorab muss ich sagen, dass ich ein abs...

So bewerben Sie sich für Webdesign-Jobs

<br />Hallo zusammen! Es ist mir eine Ehre, ...

So berechnen Sie den Wert von ken_len im MySQL-Abfrageplan

Die Bedeutung von key_len In MySQL können Sie „ex...

Zusammenfassung verschiedener Übermittlungsmethoden für HTML-Formulare

Die gebräuchlichste, am häufigsten verwendete und ...

Implementierung des React Page Turner (inkl. Front- und Backend)

Inhaltsverzeichnis Frontend Entwerfen und schreib...

Detaillierte Schritte zur Installation von Docker 1.8 auf CentOS 7

Docker unterstützt die Ausführung auf den folgend...

Umfassende Inventarisierung wichtiger Logdateien in MySQL

Inhaltsverzeichnis Einführung Protokollklassifizi...

W3C Tutorial (2): W3C Programme

Der W3C-Standardisierungsprozess ist in 7 verschi...

Das WeChat-Applet realisiert den Neun-Quadrat-Rastereffekt

In diesem Artikel wird der spezifische Code für d...

Inhaltstypbeschreibung, d. h. der Typ des HTTP-Anforderungsheaders

Um den Inhaltstyp zu lernen, müssen Sie zunächst ...

Detaillierte Erklärung zur Verwendung von $props, $attrs und $listeners in Vue

Inhaltsverzeichnis Hintergrund 1. Dokumentbeschre...

Docker erstellt Python Flask+ Nginx+Uwsgi-Container

Installieren Sie Nginx Ziehen Sie zuerst das Cent...