Der Weg vor uns ist lang und beschwerlich, aber ich werde weiter forschen. Es ist schon wieder Wochenende und ich werde weiterhin mit Ihnen MySQL-Wissen auffrischen. Letztes Mal haben wir über Prozesssteuerungsfunktionen gesprochen, also lasst uns weiter über Prozesssteuerungsfunktionen lernen! #5. Prozesssteuerungsfunktion #1. if-Funktion: die Wirkung von if elseIF (bedingter Ausdruck, gibt 1 zurück, wenn wahr, gibt 2 zurück, wenn falsch) #Gleich wie die ternäre Java-Operation SELECT IF(10>5,'big','small'); SELECT Nachname, Provisionsprozentsatz, WENN (Provisionsprozentsatz IST NULL, „Kein Bonus“, „Ja, Bonus“) AS Bemerkungen VON Mitarbeitern; #2. Verwendung der CASE-Funktion 1: Auswirkung des Swirch-Falls [Gleichwertbeurteilung] Zusammenfassung: switch(variable or expression) { Fallkonstante 1: Anweisung 1; Unterbrechung; ... Standard: Anweisung n; Unterbrechung; } In MySQL ist Groß-/Kleinschreibung das zu beurteilende Feld, der Ausdruck oder die Variable, wenn Konstante 1, dann der anzuzeigende Wert 1 oder Anweisung 1; [Semikolon ist für Anweisungen erforderlich, aber nicht für Werte] wenn Konstante 2, dann soll Wert 2 angezeigt werden oder Anweisung 2; ... slse-Wert n oder Anweisung n, die angezeigt werden soll; [Standardwert] Ende Case entspricht einem Ausdruck nach SELECT. Dahinter kann keine Anweisung stehen, sondern nur Werte. In nachfolgenden Studien können gespeicherte Prozeduren und Funktionen unabhängig, ohne SLECT und mit Anweisungen verwendet werden. Sehen wir uns zunächst ein Beispiel für die Verwendung des Ausdrucks an: Mitarbeitergehälter abfragen. Wenn Abteilungsnummer = 30, beträgt das angezeigte Gehalt das 1,1-fache. Wenn Abteilungsnummer = 40, beträgt das angezeigte Gehalt das 1,2-fache. Wenn Abteilungsnummer = 50, beträgt das angezeigte Gehalt das 1,3-fache. Für andere Abteilungen ist das angezeigte Gehalt das ursprüngliche Gehalt. SELECT Gehalt Originalgehalt, Abteilungs-ID, CASE Abteilungs-ID WENN 30 DANN Gehalt*1,1 WENN 40 DANN Gehalt*1,2 WENN 50 DANN Gehalt*1,3 ELSE-Gehalt END AS neues Gehalt VON Mitarbeitern; #2.Verwendung der CASE-Funktion 2: Mehrere IF [Intervallbeurteilung] Überprüfen Sie Java: if (Bedingung 1) { Aussage 1; }sonst wenn(Bedingung 2){ Aussage 2; }... anders{ Aussage n; } In MySQL: Fall wenn Bedingung 1, dann soll Wert 1 angezeigt werden oder Anweisung [nach der Anweisung sollte ein Semikolon hinzugefügt werden;] wenn Bedingung 2, dann soll Wert 2 angezeigt werden oder Anweisung [nach der Anweisung sollte ein Semikolon hinzugefügt werden;] ... sonst soll der Wert n oder die Anweisung n angezeigt werden Ende Beispiel: Abfrage des Gehalts eines Mitarbeiters. Wenn das Gehalt > 20.000 ist, Anzeigeebene A. Wenn das Gehalt > 15.000 ist, Anzeigeebene B. Wenn das Gehalt > 10.000 ist, Anzeigeebene C. Andernfalls Anzeigeebene D. ===============Die Prozessfunktion endet hier. Wenn Sie sie kompetent nutzen möchten, müssen Sie mehr üben. =============== Hier sind ein paar Übungen, an denen die Leser sich versuchen können! #Mehrere Lohnarten berechnen. SELECT COUNT(DISTINCT Gehalt), ANZAHL(Gehalt) VON Mitarbeitern; #5. Detaillierte Einführung der Zählfunktion SELECT COUNT(salary) FROM employees; #COUNT (alle Spalten zählen) Wählen Sie Anzahl (*) aus Mitarbeitern; #Generieren Sie eine Spalte aus den Zeilen der Tabelle und jede Spalte ist 1. Zählen Sie die Gesamtzahl der Einsen. Beim Zählen kann jeder beliebige konstante Wert verwendet werden. Wählen Sie Anzahl (1) aus Mitarbeitern; # Berücksichtigung von Effizienzaspekten: #Vor 5.5 war COUNT(*) in MYISAM am höchsten und der Zähler wurde direkt zurückgegeben. #Nach 5.5 sind COUNT() und COUNT(1) in INNODB standardmäßig fast gleich. Effizienter als COUNT(Feld). Wenn es sich um ein Feld handelt, muss ermittelt werden, ob das Feld NULL ist. #6. Die mit der Gruppierungsfunktion abgefragten Felder sind eingeschränkt: SELECT AVG(salary),employee_id FROM employees; #1. Fragen Sie das Höchst-, Mindest-, Durchschnitts- und Gesamtgehalt der Mitarbeiter des Unternehmens ab. SELECT MAX(Gehalt),MIN(Gehalt),AVG(Gehalt),SUM(Gehalt) VON Mitarbeitern; SELECT MAX(Gehalt) ALS Maximalwert, MIN(Gehalt) ALS Minimalwert, ROUND(AVG(Gehalt)) ALS Mindestwert, SUM(Gehalt) ALS Gesamtwert VON Mitarbeitern; #2. Fragen Sie die Differenz in Tagen zwischen der maximalen und minimalen Eintrittszeit in der Mitarbeitertabelle ab. #DATEDIFF Berechnet die Anzahl der Tage. DATEIFF(Parameter 1 - Parameter 2) Wählen Sie DATEDIFF (JETZT(), ('1995-1-1')); Wählen Sie DATEDIFF (MAX (Einstellungsdatum), MIN (Einstellungsdatum)) als Differenz VON Mitarbeitern; #3. Fragen Sie die Anzahl der Mitarbeiter in Abteilung Nummer 90 ab. SELECT COUNT(*) AS Zahl FROM Mitarbeiter WO Abteilungs-ID = 90; #Erweitert 5. Syntax der GROUP BY-Klausel für Gruppenabfragen. Mit der GROUP BY-Klausel können Sie die Daten einer Tabelle in mehrere Gruppen aufteilen. Grammatik: SELECT-Gruppierungsfunktion, Spalte (muss nach GROUP BY erscheinen) FROM Tabelle [WHERE Filterbedingung] GROP BY gruppierte Liste [ORDER BY-Klausel] Beachten: Die Abfrageliste muss speziell sein und erfordert die Gruppierungsfunktion und die Feldeigenschaften, die nach GROUP BY erscheinen: 1. Die Filterbedingungen in der Gruppenabfrage sind in zwei Kategorien unterteilt 2. Die GROUP BY-Klausel unterstützt die Gruppierung einzelner und mehrerer Felder (mehrere Felder werden ohne Reihenfolgeanforderungen durch Kommas getrennt). Unterstützt auch die Gruppierung von Ausdrücken oder Funktionen (weniger häufig verwendet) 3. Sie können auch eine Sortierung hinzufügen (die Sortierung wird am Ende der gesamten Gruppierungsabfrage platziert) #Einführung: Fragen Sie das Durchschnittsgehalt jeder Abteilung ab und behalten Sie zwei Dezimalstellen bei. SELECT ROUND(AVG(Gehalt),2) AS Durchschnittsgehalt FROM Mitarbeiter; #Einfache Gruppenabfrage, Filterung vor der Gruppierung hinzufügen WHERE #Fall 1: Abfrage des höchsten Gehalts für jede Tätigkeitsart. SELECT MAX(Gehalt) AS Höchstgehalt, Job-ID AS Stellennummer FROM Mitarbeiter GRUPPE NACH Job-ID; #Fall 2: Abfrage der Anzahl der Abteilungen an jedem Standort. SELECT COUNT(*) AS insgesamt, Standort-ID VON Abteilungen GRUPPE NACH Standort-ID; #Filterbedingungen hinzufügen#E-Mails abfragen, die das Zeichen a enthalten, Durchschnittsgehalt mit zwei Dezimalstellen, Durchschnittsgehalt jeder Abteilung SELECT email,ROUND(AVG(salary),2),department_id VON Mitarbeitern WO E-Mail WIE '%a%' GRUPPE NACH Abteilungs-ID; #Fall 2: Abfrage des höchsten Gehalts der Mitarbeiter jedes Leiters mit Boni SELECT MAX(Gehalt), Manager-ID VON Mitarbeitern Wo provisions_prozent nicht NULL ist GRUPPE NACH Manager-ID; Komplexe Filterung hinzufügen, Filterung nach der Gruppierung hinzufügen HAVING #Fall 1: Abfrage, welche Abteilung die Anzahl der Mitarbeiter > 2 hat #①Fragen Sie die Anzahl der Mitarbeiter in jeder Abteilung abSELECT COUNT(*),department_id VON Mitarbeitern GRUPPE NACH Abteilungs-ID; #②Überprüfen Sie anhand des Ergebnisses von ①, welche Abteilung mehr als 2 Mitarbeiter hat SELECT COUNT(*) AS total, department_id AS Abteilungsnummer FROM Mitarbeiter GROUP BY Abteilungs-ID MIT ANZAHL(*)>2; #Fall 2. Fragen Sie die Stellennummer und das Höchstgehalt von Mitarbeitern mit Prämien in jedem Stellentyp ab, deren Höchstgehalt > 12.000 ist. #①Fragen Sie das höchste Gehalt der Mitarbeiter ab, die in jeder Jobart Boni erhalten. #Setzen Sie die Originaltabelle, die gefiltert werden kann, nach FROM und verwenden Sie WHERE. SELECT job_id AS Mitarbeiternummer, MAX(Gehalt) AS Höchstgehalt FROM Mitarbeiter Wo provisions_prozent nicht NULL ist GRUPPE NACH Job-ID; #②Setzen Sie die Überprüfung basierend auf dem Ergebnis von ① fort. Das höchste Gehalt beträgt >12.000. SELECT job_id AS Mitarbeiternummer, MAX(Gehalt) AS Höchstgehalt FROM Mitarbeiter Wo provisions_prozent nicht NULL ist GROUP BY Job-ID MIT MAX(Gehalt)>12000; #Fall 3. Fragen Sie die Leiternummer jedes Leiters mit einem Mindestgehalt > 5000 und ihr Mindestgehalt für Leiter mit einer Leiternummer > 102 ab. #①Fragen Sie das Mindestgehalt jedes Leiters mit einer Leiternummer > 102 ab. SELECT MIN(Gehalt) ALS Mindestgehalt, Manager-ID ALS Leiternummer VON Mitarbeitern WO manager_id > 102 GRUPPE NACH Manager-ID; #②Der Mindestlohn liegt über 5000. SELECT MIN(Gehalt) AS Mindestgehalt, Manager-ID AS Führungsnummer FROM Mitarbeiter WO manager_id > 102 GROUP BY Manager-ID MINDESTGEHALT > 5000; #Fall: Gruppieren Sie nach der Länge der Mitarbeiternamen, fragen Sie die Anzahl der Mitarbeiter in jeder Gruppe ab und filtern Sie heraus, welche Mitarbeiter mehr als 5 haben. #In MYSQL werden Aliase nach GROUP BY und HAVING unterstützt, aber nicht nach WHERE. Allerdings unterstützen die ORACLE-Datenbanken GROUP BY und HAVING keine Aliase. SELECT LENGTH(CONCAT(Nachname,Vorname)) AS Namenslänge, COUNT(*) AS Zahl FROM Mitarbeiter GROUP BY Namenslänge mit Namenslänge > 5; #Gruppieren nach mehreren Feldern# Beispiel: Abfrage des Durchschnittsgehalts der Mitarbeiter in jeder Abteilung (zwei Dezimalstellen beibehalten). SELECT ROUND(AVG(Gehalt),2) AS Durchschnittsgehalt,Abteilungs-ID AS Abteilung,Job-ID AS Jobtyp FROM Mitarbeiter GRUPPELN NACH Abteilung, Jobtyp; #Sortierung hinzufügen#Beispiel: Fragen Sie das Durchschnittsgehalt der Mitarbeiter in jeder Abteilung und jedem Jobtyp ab und zeigen Sie sie nach Durchschnittsgehalt an. SELECT ROUND(AVG(Gehalt),2) AS Durchschnittsgehalt,Abteilungs-ID AS Abteilung,Job-ID AS Jobtyp FROM Mitarbeiter GRUPPIEREN NACH Jobtyp, Abteilung SORTIEREN NACH Durchschnittsgehalt DESC; #Fall: Die Abfrageabteilung darf nicht leer sein. Geben Sie das Durchschnittsgehalt der Mitarbeiter jedes Jobtyps in jeder Abteilung ein und zeigen Sie sie entsprechend dem Durchschnittsgehalt an. SELECT ROUND(AVG(Gehalt),2) AS Durchschnittsgehalt,Abteilungs-ID AS Abteilung,Job-ID AS Jobtyp FROM Mitarbeiter Wobei department_id nicht NULL ist GRUPPIEREN NACH Jobtyp, Abteilung SORTIEREN NACH Durchschnittsgehalt DESC; #Fall: Die Abfrageabteilung darf nicht leer sein. Das Durchschnittsgehalt der Mitarbeiter in jeder Abteilung und jeder Art von Arbeit ist höher als 10.000 und wird entsprechend dem Durchschnittsgehalt angezeigt. SELECT ROUND(AVG(Gehalt),2) AS Durchschnittsgehalt,Abteilungs-ID AS Abteilung,Job-ID AS Jobtyp FROM Mitarbeiter Wobei department_id nicht NULL ist GRUPPE NACH Jobtyp, Abteilung MIT Durchschnittsgehalt > 10000 ORDER BY Durchschnittsgehalt DESC; Kräftigungsübungen: #1. Fragen Sie das Höchst-, Mindest-, Durchschnitts- und Gesamtgehalt der Mitarbeiter für jede Job-ID ab und sortieren Sie sie in aufsteigender Reihenfolge nach der Job-ID. SELECT job_id,MAX(Gehalt),MIN(Gehalt),AVG(Gehalt),SUM(Gehalt) VON Mitarbeitern GROUP BY Job-ID ORDER BY job_id ASC; #2. Abfrage der Differenz zwischen dem höchsten und niedrigsten Lohn der Arbeitnehmer (DIFFERENZ). SELECT MAX(Gehalt) - MIN(Gehalt) ALS DIFFERENZ VON Mitarbeitern; ======================================================= SELECT MAX(Gehalt) AS höchstes, MIN(Gehalt) AS niedrigstes, MAX(Gehalt)-MIN(Gehalt) AS DIFFERENCE VON Mitarbeitern; #3. Abfrage des Mindestgehalts der Mitarbeiter unter jedem Manager. Das Mindestgehalt darf nicht unter 6.000 liegen. Mitarbeiter ohne Manager können nicht einbezogen werden. SELECT MIN(Gehalt),CONCAT(Nachname,Vorname),Manager_ID VON Mitarbeitern Wobei manager_id nicht NULL ist GROUP BY Manager-ID MIT MIN(Gehalt)>6000; Damit sind die MySql-Statistiken und die Gruppenabfrage abgeschlossen. Wer kein Gefühl dafür hat, kann es auch manuell üben. Die Sommersonne scheint immer so hell und blendend, aber häufigeres Sonnenbaden kann auch den Kalziumbedarf decken. Wer hätte das gedacht? o(^▽^)o Dies ist das Ende dieses Artikels über die Analyse der Verwendung von Prozesssteuerungsfunktionen/statistischen Funktionen/gruppierten Abfragen in MySql. Weitere relevante MySql-Prozesssteuerungsfunktionen, statistische Funktionen und gruppierte Abfragen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Ubuntu 20.04 CUDA- und cuDNN-Installationsmethode (grafisches Tutorial)
>>: Detaillierte Erklärung der Zeit- und Datumsverarbeitung von moment.js
Registerkartenleiste: Klicken Sie auf verschieden...
Win10 + Ubuntu 20.04 LTS Dual-System-Installation...
1. Anzeige:Box; Wenn Sie diese Eigenschaft für ei...
Kommunikation zwischen Containern 1. Netzwerkfrei...
Frage Nginx nimmt $remote_addr als echte IP-Adres...
1. Anforderungsbeschreibung Bei einem bestimmten ...
Es gibt einige Probleme mit der komprimierten Ver...
Vorschau auf die überarbeitete Fassung Dieser Art...
In diesem Artikel wird der spezifische Code von v...
Nicht nur das Verhalten verschiedener Browser ist...
Herzlichen Glückwunsch, dass Sie Ihren Chef endli...
Inhaltsverzeichnis 1. Was ist scrapy_splash? 2. D...
Hintergrund Die Menge neuer Daten in der Geschäft...
1. Hintergrund Bei unserer täglichen Website-Wart...
Modulares Cocos Creator-Skript Mit Cocos Creator ...