Implementierungsschritte für MySQL-Zusammenführungsergebnisse und horizontale Spleißfelder

Implementierungsschritte für MySQL-Zusammenführungsergebnisse und horizontale Spleißfelder

Vorwort

Vor kurzem habe ich an einer Berichtsfunktion gearbeitet und es bestand die Anforderung, die Anzahl der Personen zu zählen, die in einem bestimmten Monat in jede Abteilung eintraten und sie verließen.

Meine Schritte

Ermitteln Sie zunächst die Anzahl der Mitarbeiter

SELECT dept ,COUNT(1) rcNumber FROM employee table WHERE (Eintrittszeitpunkt!= ''
  ODER Eintrittsdatum IST NICHT NULL) und DATE_FORMAT(Eintrittsdatum, '%Y-%m') = '2019-09'
GROUP BY Abteilungs-ID
ORDER BY Abteilungsname

Datensätze abfragen

Bei der Abfrage der Anzahl der Personen, die gekündigt haben, führt SQL Folgendes aus:

SELECT dept ,COUNT(1) rcNumber FROM employee table WHERE (Kündigungsdatum != ''
  ODER Austrittsdatum ist nicht NULL) und DATE_FORMAT(Eintrittsdatum, '%Y-%m') = '2019-09'
GROUP BY Abteilungs-ID
ORDER BY Abteilungsname

Ergebnismenge

Die Daten, die ich will, sind diese

Ich habe folgendes versucht

1. Ich betrachte die beiden Abfrageergebnisse als zwei Tabellen und verwende Left Join. Ehrlich gesagt ist das Datenformat das, was ich möchte, aber ich denke, wenn die rechte Tabelle mehr Datensätze enthält, gibt es dann nicht weniger Daten, wenn ich diese Methode verwende? (Dasselbe gilt für die rechte Seite)

2. Ich verwende union all, was nicht die gewünschten Daten sind, um die beiden Ergebnisse direkt hinzuzufügen und vertikal zu verbinden

3. Ich habe select * from a,b verwendet und das Ergebnis ist das kartesische Produkt der beiden Tabellen.

Ich werde das SQL für die obige Methode nicht veröffentlichen, aber die Bedeutung sollte klar sein.

Ich konnte es nicht glauben und fragte weiter bei Baidu. Baidu gab mir schließlich eine Antwort, also probierte ich es aus.

1. Verarbeiten Sie den SQL-Eintrag wie folgt

SELECT a.dept,a.rcNumber,0 as lcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM employee table WHERE (Eintrittszeit!= ''
  ODER Eintrittsdatum IST NICHT NULL) und DATE_FORMAT(Eintrittsdatum, '%Y-%m') = '2019-09'
GROUP BY Abteilungs-ID
ORDER BY Abteilungsname) a

Die Rücktritts-SQL wird wie folgt verarbeitet:

SELECT a.dept,a.lcNumber,0 als rcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM Mitarbeitertabelle WHERE (Kündigungsdatum != ''
  ODER Austrittsdatum ist nicht NULL) und DATE_FORMAT(Eintrittsdatum, '%Y-%m') = '2019-09'
GROUP BY Abteilungs-ID
ORDER BY Abteilungsname) a

Sie können auch eine Ebene außerhalb hinzufügen oder nicht. Ich füge sie einfach dem ursprünglichen SQL hinzu, um die Zerstörung der Basisanweisung zu vermeiden. Natürlich reicht das nicht aus.

2. Verbinden Sie die beiden Aussagen vertikal und verbinden Sie sie mit der Summe

SELECT dept, Summe(cm_1) als rcNumber, Summe(cm_0) als lcNumber FROM( SELECT c.id,c.dept,SUM(c.lcNumber) als cm_0,c.rcNumber als cm_1 FROM 
(SELECT a.dept,a.rcNumber,0 as lcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM employee table WHERE (Eintrittszeit!= ''
  ODER Eintrittsdatum IST NICHT NULL) und DATE_FORMAT(Eintrittsdatum, '%Y-%m') = '2019-09'
GROUP BY Abteilungs-ID
ORDER BY Abteilungsname) a) c GROUP BY c.dept
UNION ALLE 
Wählen Sie d.id, d.dept, d.lcNumber als cm_0, SUM(d.rcNumber) als cm_1 aus 
(SELECT a.dept,a.lcNumber,0 as rcNumber FROM (SELECT dept ,COUNT(1) rcNumber FROM employee table WHERE (Kündigungszeitpunkt != ''
  ODER quit_date IST NICHT NULL) und DATE_FORMAT(join_date, '%Y-%m') = '2019-09'
GROUP BY Abteilungs-ID
ORDER BY Abteilungsname) a) d GROUP BY d.dept) t GROUP BY t.dept ORDER BY t.id

Endlich habe ich das gewünschte Ergebnis erhalten

Zusammenfassen

Dies ist das Ende dieses Artikels über MySQL-Zusammenführungsergebnisse und horizontale Spleißfelder. Weitere relevante MySQL-Zusammenführungsergebnisse und horizontale Spleißfelder finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Mysql implementiert drei Funktionen zum Feldspleißen
  • Detaillierte Erklärung der MySQL-Zeichenfolgenverkettungsfunktion GROUP_CONCAT
  • Detailliertes Beispiel für die Verkettung mehrerer Felder in MySQL

<<:  HTML Table Tag Tutorial (47): Verschachtelte Tabellen

>>:  So verwenden Sie eine VLAN-getaggte Ethernet-Karte im CentOS/RHEL-System

Artikel empfehlen

Reines HTML+CSS, um einen Tippeffekt zu erzielen

In diesem Artikel wird hauptsächlich der durch re...

Die Kombination und der Unterschied zwischen ENTRYPOINT und CMD im Dockerfile

Im vorherigen Artikel [Detaillierte Erläuterung v...

React implementiert Paging-Effekt

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

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.5

Organisieren Sie die Tutorialnotizen zur Installa...

Vue implementiert eine einfache Produktion von Zählern

In diesem Artikelbeispiel wird der einfache Imple...

Vue implementiert Bildverifizierungscode beim Anmelden

In diesem Artikelbeispiel wird der spezifische Co...

JavaScript zum Erzielen von Feuerwerkseffekten (objektorientiert)

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

js zur Realisierung einer einfachen Warenkorbfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Ändern Sie die Dateiberechtigungen (Eigentum) unter Linux

Linux und Unix sind Mehrbenutzer-Betriebssysteme,...

So können Sie lange Vue-Listen schnell laden

Inhaltsverzeichnis Hintergrund Hauptinhalt 1. Kom...

JavaScript-Grundlagenoperatoren

Inhaltsverzeichnis 1. Betreiber Zusammenfassen 1....

Achten Sie bei der Webseitenerstellung auf die Verwendung von HTML-Tags

HTML hat versucht, sich von der Präsentation weg ...

Vue implementiert Beispielcode für Links- und Rechtsgleiteffekte

Vorwort Die bei der persönlichen tatsächlichen En...