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

Rankings zur Benutzerfreundlichkeit chinesischer Websites

<br />Die Benutzererfahrung wird von chinesi...

7 interessante Möglichkeiten, versteckte Elemente in CSS zu erreichen

Vorwort Die Ähnlichkeiten und Unterschiede zwisch...

Java verwendet Apache.POI, um HSSFWorkbook nach Excel zu exportieren

Verwenden Sie HSSFWorkbook in Apache.POI, um nach...

CentOS 8 offiziell veröffentlicht, basierend auf Red Hat Enterprise Linux 8

Das CentOS-Projekt, ein 100 % kompatibler Neuaufb...

Analyse des Tutorials zur Implementierung der Remote-Anmeldung unter Linux

Linux wird im Allgemeinen als Server verwendet un...

So begrenzen Sie die Anzahl der Datensätze in einer Tabelle in MySQL

Inhaltsverzeichnis 1. Lösung auslösen 2. Partitio...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.16 winx64

Ich habe erst vor Kurzem angefangen, mich mit Dat...

Docker-Installation Tomcat Dubbo-Admin-Instanz-Kenntnisse

1. Laden Sie das Tomcat-Image herunter Docker zie...

Der gesamte Prozessdatensatz der rekursiven Komponentenkapselung von Vue3

Inhaltsverzeichnis Vorwort 1. Rekursive Komponent...

Beispiel für ein JavaScript-Meldungsfeld

In JavaScript können drei Arten von Meldungsfelde...