So fügen Sie bedingte Ausdrücke zu Aggregatfunktionen in MySql hinzu

So fügen Sie bedingte Ausdrücke zu Aggregatfunktionen in MySql hinzu

MySQL-Filterungs-Timing von Where-Bedingungen und Having-Bedingungen bei Verwendung mit Aggregatfunktionen

wo Filter vor der Aggregation

Wenn eine Abfrage Aggregatfunktionen und Where-Bedingungen enthält, wie etwa
wähle max(cid) aus t, wobei t.id<999
Zu diesem Zeitpunkt wird zuerst die Filterung und dann die Aggregation durchgeführt. Filtern Sie zuerst die Datensätze mit der ID < 999 heraus, suchen Sie dann die größte ID und geben Sie sie zurück.

Filter nach der Aggregation haben

„Having“ wird beim Gruppieren verwendet, um die Gruppierungsergebnisse zu filtern und enthält normalerweise Aggregatfunktionen.

Wählen Sie IP, MAX(ID) aus der App aus.
GRUPPE NACH IP
MIT MAX(id)>=5

Zuerst gruppieren, dann aggregieren und dann den Ergebnissatz filtern, bei dem das aggregierte Ergebnis größer oder gleich 5 ist

Der Unterschied zwischen den beiden:

wobei zuerst und dann die Aggregatfunktion ausgeführt wird. Having wird ausgeführt, nachdem die Aggregatfunktion ausgeführt wurde.

Nachfolgend eine Ergänzung

Es besteht die Anforderung, dass eine Tabelle ein Statusfeld hat (1: Erfolg, 2: Fehler usw.). Jetzt müssen wir die Datumsgruppierung verwenden, um die Anzahl der Elemente in verschiedenen Zuständen zu zählen.

Schreiben Sie zuerst eine Unterabfrage

Wählen Sie aa.logDate,aa.totalLogs 
 , (wählen Sie count(1) aus dxp.dxp_handlermodel, wobei aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') und executeStatus=1) pendingLogs
 , (wählen Sie count(1) aus dxp.dxp_handlermodel, wobei aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') und executeStatus=2) successLogs
 , (wählen Sie count(1) aus dxp.dxp_handlermodel, wobei aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') und executeStatus=3) errorLogs
 , (wählen Sie count(1) aus dxp.dxp_handlermodel, wobei aa.logDate=DATE_FORMAT( startTime, '%Y-%m-%d') und executeStatus=4) callbackErrorLogs
aus
(
 wählen
 DATE_FORMAT( a.startTime, '%Y-%m-%d') logDate,
 Anzahl(1) Gesamtprotokolle
 von dxp.dxp_handlermodel ein 
 Gruppieren nach DATE_FORMAT(a.startTime, '%Y-%m-%d') 
)

Die Ausführung ist ziemlich langsam, daher habe ich mich gefragt, ob ich zum Zählen Bedingungen hinzufügen könnte, und habe Folgendes gefunden:

wählen
DATE_FORMAT( Startzeit, '%Y-%m-%d') Logdatum,
 Anzahl(1) Gesamtprotokolle,
 Anzahl (wenn (ExecuteStatus = 1, true, null)) ausstehende Protokolle,
 Anzahl (wenn (ExecuteStatus = 2, true, null)) Erfolgsprotokolle,
 Anzahl (wenn (ExecuteStatus = 3, true, null)) Fehlerprotokolle,
 Anzahl(wenn(executeStatus=4,true,null)) RückrufFehlerprotokolle
von dxp.dxp_handlermodel
Gruppieren nach DATE_FORMAT(Startzeit, '%Y-%m-%d')

Leicht verständlich und hocheffizient in der Umsetzung

Es können auch andere Aggregatfunktionen verwendet werden, wie z. B. SUM und andere Aggregatfunktionen

Praxisbeispiel:

Wählen Sie die Anzahl (wenn (Erstellungsdatum < '2017-01-01' und Host-Profil-ID = '9294d2bf-f457-4fe5-9a36-e5f832310dc2', true, null)) aus dem Profilbesuchsprotokoll. 
-- Entspricht „select count(if(create_date < '2017-01-01',true,null)) count from profile_visit_log where host_profile_id = '9294d2bf-f457-4fe5-9a36-e5f832310dc2'“

Dies ist das Ende dieses Artikels. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen.

Das könnte Sie auch interessieren:
  • Sortieren von MySQL-Aggregatfunktionen
  • MySQL-Gruppierungsabfragen und Aggregatfunktionen
  • Analyse der Verwendung von MySQL-Abfragesortierung und Abfrageaggregationsfunktionen
  • Nutzungs- und Leistungsoptimierungstechniken für die Aggregatfunktion „count“ in MySQL
  • Grundlegende MySQL-Grundlagen: Gruppierungsfunktion, Aggregatfunktion, Gruppierungsabfrage – ausführliche Erklärung

<<:  So gehen Sie mit dem Verlust von Parametern um, wenn Sie die Seite aktualisieren und Parameter an den Vue-Router übergeben

>>:  Methode zum Erkennen, ob IP und Port verbindbar sind

Artikel empfehlen

XHTML verwendet einige veraltete Elemente in HTML nicht mehr

Wenn wir CSS-Webseitenlayouts erstellen, wissen wi...

Detaillierte Einführung in Protokolle im Linux-System

Inhaltsverzeichnis 1. Logbezogene Dienste 2. Geme...

Mit vsftp einen FTP-Server unter Linux aufbauen (mit Parameterbeschreibung)

einführen In diesem Kapitel wird hauptsächlich de...

Tipps zur Optimierung von MySQL SQL-Anweisungen

Wenn wir mit einer SQL-Anweisung konfrontiert wer...

Tutorial zur HTML-Tabellenauszeichnung (1): Erstellen einer Tabelle

<br />Dies ist eine Reihe von Tutorials, die...

Detaillierte Erklärung des Unterschieds zwischen Uniapp und Vue

Inhaltsverzeichnis 1. Einfaches Seitenbeispiel 2....

Detaillierte Analyse der Replikation in MySQL

1.MySQL-Replikationskonzept Dies bedeutet, dass d...

Lösung - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: Unzureichende Berechtigungen

1) Geben Sie den Ordnerpfad ein, in dem die JDK-D...

Verständnis und Beispielcode des Vue-Standardslots

Inhaltsverzeichnis Was ist ein Slot Grundlegendes...

Praktisches Beispiel einer virtuellen Vue-Liste

Inhaltsverzeichnis Vorwort Design erreichen Zusam...

Flexibles Boxmodell von CSS und CSS3 zur Anpassung der Elementbreite (-höhe)

1. CSS realisiert eine feste Breite links und ein...