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

Linux-Installation Apache-Server-Konfigurationsprozess

Bereiten Sie die Taschen vor Installieren Überprü...

favico.ico --- Schritte zum Einrichten des Website-ICO-Symbols

1. Laden Sie die erfolgreich generierte Symboldate...

Die Verbindung zwischen JavaScript und TypeScript

Inhaltsverzeichnis 1. Was ist JavaScript? 2. Wofü...

Lösung für den 1045-Fehler in der MySQL-Datenbank

Wie löst man das Problem 1045, wenn die lokale Da...

MySQL: Praktische Erfahrung mit der Verwendung der Insert-Anweisung

Inhaltsverzeichnis 1. Mehrere Syntaxen von Insert...

So schreiben Sie Objekte und Parameter, um Flash in Firefox abzuspielen

Code kopieren Der Code lautet wie folgt: <Obje...

Einführung in die Installation des Vim-Plugins unter Linux

Inhaltsverzeichnis Installieren Sie den Vim-Plugi...

Der Unterschied zwischen redundanten und doppelten Indizes in MySQL

MySQL ermöglicht das Erstellen mehrerer Indizes f...

Javascript implementiert die Webversion des Flipperspiels

Das mit JavaScript-Objekten und -Methoden impleme...

Samba-Serverkonfiguration unter Centos7 (tatsächlicher Kampf)

Samba Übersicht Samba ist eine kostenlose Softwar...

So lösen Sie das Problem verschwommener kleiner Symbole auf Mobilgeräten

Vorwort Zuvor habe ich über das Problem der verti...

js, um den Popup-Effekt zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

So implementieren Sie eine steuerbare gepunktete Linie mit CSS

Vorwort Die Verwendung von CSS zum Generieren gep...